0

尽管如此,我的代码还是有问题。

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: cannot convert parameter 4 from 'int' to 'const char *'

4

2 回答 2

1

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

所以是这样的:

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

我对套接字的了解还不够,无法告诉您您传递的内容是否真的有意义。这是 MSDN 上有关 IP_OPTIONS 的文档。

于 2015-06-02T19:28:05.593 回答
0
timeout = send_timeout_seconds * 1000;

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout);
于 2021-02-19T12:46:39.810 回答