[완료]socket 에 listen함수에 대해서 질문을 드리겠습니다.

anaud2의 이미지

안녕하세요

socket에서 서버가 listen함수에 대해서 질문드립니다.
int listen(int socketfd, int backlog);
여기서 "backlog는 인자는 아직 미결인 연결들에 대한 큐의 늘어날 수 있는 최대 길이를 정의한다" 라고 되어있는데요
그렇다면 이건 클라이언트가 connect 요청을 했을때 받아주는 갯수라고 생각이 드는데요

connect에서 무한대기를 할까봐 sigalrm 을 설정했는데요 이것을 테스트하기 위해서 2개의 클라이언트가 서버에 접속 요청을하면
하나가 실패를 하게 하기 위해 backlog값을 0으로 맞췄는데도 두개가 connect 성공을 하네요

backlog는 상관이 없는것인가요 어떻게 해야 클라이언트의 connect가 대기를 할까요

vamf12의 이미지

backlog 값은 요청 성공이 아니라 대기가능한 connection의 값입니다.
2개 이상의 연결 요청이 들어 올경우 먼저 들어온 1개만 처리되고, 이후의 연결은 대기 큐에 들어갑니다.
(대기상태기 때문에 블록됩니다.)
listen함수가 다시 불러지면, 대기큐에 들어 있던 connection이 먼저 처리됩니다.

말씀하신 경우는 connect함수가 성공한게 아니라 에러를 리턴한것 같습니다. connect함수의 리턴값과 errno을 먼저 확인해보시고, backlog값을 2이상으로 올려 보시지요

anaud2의 이미지

서버가 backlog 값을 0으로 하고 2개의 클라이언트가 접속을 요청한다음 각각 클라이언트에 errno값을 찍어봤습니다.

/*server*/
    if(listen(serv_sock, 0)==-1)
        error_handling("listen() error");

/*client*/
if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
{
if(errno == EINTR)
{
close(sock);
//return CODE3007;
return 300700;
}
return CODE3002;
}
else
printf("connect[%d]\n",errno);[/code]

소스는 위와 같습니다. errno값을 찍었을때 클라이언트 둘다
connect[0]
이렇게 나오네요 이렇다면 connect이 성공했다는 뜻아닌가요? 대기상태도 아닌거 같은데요.

rookey94의 이미지

Connect에는 성공하신것입니다.
소켓의 접속은 생각보다 빨리 이루어집니다. 대기큐에서 뽑아가는 속도가 빠르죠..^^;
Clint에서 동시에 접속을 했다고 하나 제가 볼때는 약간의 시간차가 있었던것 같습니다.
Accept 함수에서 약간의 지연을 주어 접속 대기큐에서 뽑아내는것을 늦게 처리하고 테스트 해보면 될것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.