소켓을 사용하다 보면 옵션이 필요한 경우가 있습니다.
책에서 나오는 예제를 보면 가장 처음에는 send, recv buffer 크기 변경하는게 나오더 군요.
하지만 더 많죠. 거기에 대해서 블로깅 하겠습니다.
소켓 옵션 설정하기
소켓 옵션 얻기
일단 소켓 옵션 사용하는 것은 아래와 같은 함수를 사용합니다.
인자를 설명하자면
소켓, 변경할 옵션의 프로토콜 레벨, 변경할 옵션 이름, 변경할 옵션의 값을 저장한 버퍼, 전달하는 옵션의 바이트 단위 길이.
이렇게 5개가 되네요.
소켓 옵션은 크게 세 개가 있습니다.
SOL_SOCKET |
IPPROTO_IP |
IPPROTO_TCP |
소켓에 대한 가장 일반적인 옵션 |
IP Protocol의 옵션 |
TCP Protocol의 옵션 |
소켓 옵션 - SOL_SOCKET
소켓 옵션 - IPPROTO_IP
소켓 옵션 - IPPROTO_TCP
SO_REUSEADDR 옵션
소켓을 사용해서 함수를 만들다 보면 bind가 되지 않는 현상을 자주 봤을 것입니다.. 이것은 4Way-handshaking 과정 때문인데 서버가 먼저 강제 종료 된다면 소켓이 바로 종료가 되는 것이 아니라 TIME-WAIT 상태로 빠지게 되기 때문에 그렇습니다. (Handshaking 참조) 그래서 현재 bind가 되어 있는 상태이기 때문에 다시 bind 하려고 하면 에러가 나는 것이죠. 이 상태는SOL_SOCKET의 SO_REUSEADDR을 바꿈으로써 해결 할 수 있습니다.
'NativeCode > api' 카테고리의 다른 글
WSAGetLastError() (0) | 2010.04.06 |
---|---|
Sock 정보들 (0) | 2010.04.04 |
Broadcasting 예제 (0) | 2010.03.31 |
UDP Server, Client (0) | 2010.03.31 |
Server Socket (0) | 2010.03.19 |