函数原型为:
#include <netinet/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
Return: 0 if OK, –1 on error
这个函数用于获得socket的各种特性,即socket options. 结果放在函数的后两个参数中,这两个参数是value-result。
sockfd 是所要查看的socket的file descriptor
level 和 optname 在Figure 7.1 中(Unix Network Programming, P.193)
optval,getsockopt() 函数把所得到的socket option的值放到这个参数之中。它的数据类型要和Figure 7.1中的Datatype一致。
optlen 作为参数是表示optval 的大小。作为结果是表示返回的 optval 的大小。
#include "unp.h" #include <netinet/tcp.h> int main(int argc, char **argv) { int fd, val; socklen_t len; char strres[128]; len = sizeof(val); fd = Socket(AF_INET, SOCK_STREAM, 0); if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &val, &len) == -1) { err_ret("getsockopt error"); } else { if(len != sizeof(int)) snprintf(strres, sizeof(strres), "sizeof (%d) not sizeof(int)", len); else snprintf(strres, sizeof(strres), "%d", val); printf("default = %s\n", strres); } close(fd); exit(0); }
这里是查看receive buffer的大小。