|
|
发表于 2005-10-9 09:52:25
|
显示全部楼层
获取TCP, UDP, UNIX(Stream, Datagram)的sendbuf , recvbuf大小的代码:
/*
*
*/
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
int nsize;
int tcpfd, udpfd, unixfd, unixudpfd;
socklen_t nlen = 8;
if ((tcpfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("error: socket\n");
perror("reason");
exit(1);
}
nsize = 0;
if (getsockopt(tcpfd, SOL_SOCKET, SO_SNDBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("TCP send buff size: %d\n", nsize);
nsize = 0;
if (getsockopt(tcpfd, SOL_SOCKET, SO_RCVBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("TCP recv buff size: %d\n", nsize);
nsize = 0;
if ((udpfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
printf("error: socket\n");
perror("reason");
exit(1);
}
nsize = 0;
if (getsockopt(udpfd, SOL_SOCKET, SO_SNDBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("UDP send buff size: %d\n", nsize);
nsize = 0;
if (getsockopt(udpfd, SOL_SOCKET, SO_RCVBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("UCP recv buff size: %d\n", nsize);
if ((unixfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
printf("error: socket\n");
perror("reason");
exit(1);
}
nsize = 0;
if (getsockopt(unixfd, SOL_SOCKET, SO_SNDBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("Unix domain Stream send buff size: %d\n", nsize);
nsize = 0;
if (getsockopt(unixfd, SOL_SOCKET, SO_RCVBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("Unix domain Stream recv buff size: %d\n", nsize);
if ((unixudpfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {
printf("error: socket\n");
perror("reason");
exit(1);
}
nsize = 0;
if (getsockopt(unixudpfd, SOL_SOCKET, SO_SNDBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("Unix domain Datagram send buff size: %d\n", nsize);
nsize = 0;
if (getsockopt(unixfd, SOL_SOCKET, SO_RCVBUF, &nsize, &nlen)) {
printf("error: getsockopt\n");
perror("reason");
exit(1);
}
printf("Unix domain Datagram recv buff size: %d\n", nsize);
close(tcpfd);
close(udpfd);
close(unixfd);
return 0;
} |
|