2010-04-02 8 views
1

setsockopt를위한 프로토 타입은 다음과 같습니다setsockopt를 (SYS/socket.h)

INT의 setsockopt를 (INT 소켓, INT 수준, INT의 OPTION_NAME, CONST 무효 * option_value, socklen_t이 option_len);

다음 내용이 모두 정확합니까? 어느 쪽이 아닌가?

.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *) &, sizeof (buffsize));

b.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (void *) &buffsize, sizeof (buffsize));

c.) char * buffsize = "50000";setsockopt (s, SOL_SOCKET, SO_RCVBUF, buffsize, strlen (buffsize));

d) setsockopt (s, SOL_SOCKET, SO_RCVBUF, "50000", 5);

답변

2

SO_RCVBUF 옵션은 매개 변수 유형이 int 인 것으로 정의되어 있으므로 (c) 및 (d)는 올바르지 않습니다. C는 자동으로 int *const void *로 변환 것이기 때문에

http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tagtcjh_8

가 어떤 캐스트가 필요하지 않습니다 :

int buffsize = 50000; 
setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffsize, sizeof(buffsize)); 

그러나 char *void *도 자동으로 변환되기 때문에, (A) (b) 또한 일해야한다.