setsockopt질문

ddoman의 이미지

리눅스 2.4.18 한컴을 쓰는데,

bool nodelay = TRUE;
setsockopt( socket, IPPROTO_TCP, TCP_NODELAY, (const char*)&nodelay, sizeof( bool ) );

했는데, return값이 자꾸 -1이 나오네요.
그런데, sizeof( int )혹은...그냥 4라고 쓰면 되고,...3이나 2는 안되더라구요.

도대체 이유가 뭐죠?

당연히 bool값을 썼으니, 당근 사이즈도 sizeof(bool)이 되어야하는데
왜 안되는지..

swhong의 이미지

setsockopt의 prototype을 보면, 님께서 마지막 두개의 argument에대해 조금 혼동을 하신듯 합니다.

setsockopt의 prototype은

setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

입니다. 여기서 마지막 두개 즉 optval, optlen의 관계는 말이죠...

optval는 option value에대한 pointer이고, optlen은 바로 optval의 size를 넘겨주는 것인데요..

님께서 마지막 optlen을 잘못 이해하고 있는듯 합니다.

즉 마지막 arguement는

(const char*)&nodelay

즉 charater를 가르치는 pointer의 크기인 sizeof(nodelay) 가 되어야 하겠지요...

4 라고 적어죠도 pointer의 size와 같으니 되는 것은 당연하구요...

그 이하의 값은 에러가나는 것도 당연한 것이겠지요...

제가 설명을 잘 했는지..카카...

- by swhong in jgdr.net -