visual studio 2012 -如何在c++中使用setsockopt设置套接字选项

visual studio 2012 - How to set a socket option in C++ using setsockopt

本文关键字:setsockopt 设置 选项 套接字 c++ 2012 studio visual      更新时间:2023-10-16

我的代码还是有问题。

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()实现有第四种选择的const char*。POSIX通常有一个const void*。它必须指向一个包含值的缓冲区。最后一个参数是以字节为单位的缓冲区大小。

所以像这样:

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

我对套接字的了解不够,无法告诉你传递的内容是否有意义。以下是IP_OPTIONS在MSDN上的文档

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