UDP 소켓을 생성하고 sendto함수를 통해 데이타를 전송할때
블럭이 되는경우가 있나요? 일반적인 상황에서는 블럭이 안되는거 같은데.
특정상황에서 혹.. 블럭될수도 있는지... 궁금합니다.
socket 의 buffer 가 부족해서 그런것 같습니다.
현재 socket 에 설정되어 있는 buffer size 보다 큰 데이타를 전송하거나,
buffer 에 있는 data 가 어떠한 이유로 전송되지 못하고 남아 있을경우 그럴수 있습니다.
일단, 물리적인 네트워크에는 이상이 없는지 체크해보시고,
이상이 없다면 socket buffer size 를 늘리시는게 좋을것 같습니다.
저도 정확히는 기억이 나지 않습니다만, 버퍼가 부족하다거나 하는 이유로 UDP 소켓이 block된다는 것은 좀 이상하네요..
udp 의 sendto 가 block 을 할지 안할지는 OS 마다 조금씩 틀린것 같습니다.
Linux 의 경우 block 될 수 있고, 그것을 결정하는 요인은
socket 의 send buffer 가 꽉 차있냐 아니냐 입니다.
/proc/sys/net/core/wmem_max 값을 늘리신후,
socket 의 옵션중 SO_SNDBUF 값을 늘리시면 됩니다.
BSD 계열인 경우 아마 block 하지 않고 ENOBUFS 에러를 내는것 같습니다.
참고) 위의 얘기는 socket 이 blocking mode 로 동작할때를 가정한것입니다.
non-blocking mode 일 경우에는 달라지게 됩니다.
텍스트 포맷에 대한 자세한 정보
<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]
socket 의 buffer 가 부족해서 그런것 같습니다.현재 s
socket 의 buffer 가 부족해서 그런것 같습니다.
현재 socket 에 설정되어 있는 buffer size 보다 큰 데이타를 전송하거나,
buffer 에 있는 data 가 어떠한 이유로 전송되지 못하고 남아 있을경우 그럴수 있습니다.
일단, 물리적인 네트워크에는 이상이 없는지 체크해보시고,
이상이 없다면 socket buffer size 를 늘리시는게 좋을것 같습니다.
그렇다고 block되나요?
저도 정확히는 기억이 나지 않습니다만, 버퍼가 부족하다거나 하는 이유로 UDP 소켓이 block된다는 것은 좀 이상하네요..
udp 의 sendto 가 block 을 할지 안할지는 OS 마다 조금씩
udp 의 sendto 가 block 을 할지 안할지는 OS 마다 조금씩 틀린것 같습니다.
Linux 의 경우 block 될 수 있고, 그것을 결정하는 요인은
socket 의 send buffer 가 꽉 차있냐 아니냐 입니다.
/proc/sys/net/core/wmem_max 값을 늘리신후,
socket 의 옵션중 SO_SNDBUF 값을 늘리시면 됩니다.
BSD 계열인 경우 아마 block 하지 않고 ENOBUFS 에러를 내는것 같습니다.
참고) 위의 얘기는 socket 이 blocking mode 로 동작할때를 가정한것입니다.
non-blocking mode 일 경우에는 달라지게 됩니다.
댓글 달기