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

时间:2015-06-02 19:18:47

标签: c++ visual-studio-2012 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来自&#39; int&#39; to&#39; const char *&#39;

2 个答案:

答案 0 :(得分:0)

Microsoft的setsockopt()实现第四个选项const char*。 POSIX usually has一个const void*。它必须指向包含值的缓冲区。最后一个参数是缓冲区的大小(以字节为单位)。

这样的事情:

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

我不太了解套接字来告诉你,你传递的内容是否真的有意义。 IP_OPTIONS Here's the documentation on MSDN

答案 1 :(得分:0)

timeout = send_timeout_seconds * 1000;

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