阅读量:2
getsockopt函数用于获取套接字选项的当前值,而setsockopt函数用于设置套接字选项的值。它们的使用方法如下:
getsockopt函数的原型:int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
参数说明:
- sockfd:套接字描述符;
- level:选项所属的协议层;
- optname:选项的名字;
- optval:用于存储选项值的缓冲区;
- optlen:输入时为optval缓冲区的长度,输出时为实际获取的选项值的长度。
示例代码:
#include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); int optval; socklen_t optlen = sizeof(optval); // 获取TCP_NODELAY选项的当前值 getsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &optval, &optlen); printf("TCP_NODELAY: %d\n", optval); // 获取SO_RCVBUF选项的当前值 getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen); printf("SO_RCVBUF: %d\n", optval); return 0; }
setsockopt函数的原型:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
参数说明:
- sockfd:套接字描述符;
- level:选项所属的协议层;
- optname:选项的名字;
- optval:指向存放选项值的缓冲区;
- optlen:optval缓冲区的长度。
示例代码:
#include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); int optval = 1; socklen_t optlen = sizeof(optval); // 设置TCP_NODELAY选项为1 setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &optval, optlen); // 设置SO_RCVBUF选项为8192 optval = 8192; setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &optval, optlen); return 0; }
注意:在使用这些函数时,需要包含相应的头文件(如sys/socket.h
和netinet/in.h
),并确保在编译时链接相应的库(如使用-lsocket
选项)。