1

setsockopt のプロトタイプは次のとおりです。

int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);

以下はすべて正しいですか?そうでないのはどれですか?
a.)

int buffsize = 50000;
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&buffsize, 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);
4

1 に答える 1

3

オプションはのSO_RCVBUFパラメータ タイプを持つように定義されているintため、(c) と (d) は正しくありません。

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

C は を に自動的に変換するint *ためconst void *、キャストは必要ありません。

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

ただし、char *andvoid *も自動的に変換されるため、(a) と (b) も機能するはずです。

于 2010-04-02T20:18:04.320 に答える