如何使用 setsockopt 在 C++ 中设置套接字选项

How to set a socket option in C++ using setsockopt

仍然,我的代码有问题。

if (argc > 0) {
int route (argc);//[argc+1]
((char*) route)[0] = 1;
((char*) route)[1] = 2;//131
((char*) route)[2] = 3 + argc * 4;
((char*) route)[3] = 4;
for (int i = 0; i < argc; i++) {
    route = inet_addr(argv[i]);
}

if (setsockopt(_socket.native_handle(), IPPROTO_IP, IP_OPTIONS, route, (argc + 1) * 4) < 0) {
    perror("can't set socket option");
}
}

这是它的一部分,不断收到此错误 C2664:无法将参数 4 从 'int' 转换为 'const char *'

Microsoft 对 setsockopt() has a const char* for the fourth option. POSIX usually has 的实施 const void*。它必须指向一个包含值的缓冲区。最后一个参数是缓冲区的字节大小。

所以像这样:

setsockopt(
    _socket.native_handle(), IPPROTO_IP, IP_OPTIONS,
    reinterpret_cast<char*>(&route), sizeof(int));

我对套接字的了解还不够多,无法告诉您传递的内容是否真的有意义。 Here's the documentation on MSDN 对于 IP_OPTIONS。

timeout = send_timeout_seconds * 1000;

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout);