/* sock_type.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
void error_handling(char *message);
int main(int argc, char **argv)
{
int tcp_sock, udp_sock;
int sock_type=-1;
socklen_t optlen;
int state;
optlen=sizeof(sock_type);
tcp_sock=socket(PF_INET, SOCK_STREAM, 0);
udp_sock=socket(PF_INET, SOCK_DGRAM, 0);
printf("SOCK_STREAM : %d \n", SOCK_STREAM);
printf("SOCK_DGRAM : %d \n", SOCK_DGRAM);
state=getsockopt(tcp_sock, SOL_SOCKET, SO_TYPE, &sock_type, &optlen);
if(state)
error_handling("getsockopt() error!");
printf("첫 번째 소켓의 타입은 %d \n", sock_type);
state=getsockopt(udp_sock, SOL_SOCKET, SO_TYPE, &sock_type, &optlen);
if(state)
error_handling("getsockopt() error!");
printf("두 번째 소켓의 타입은 %d \n", sock_type);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
/* set_buf.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
void error_handling(char *message);
int main(int argc, char **argv)
{
int sock;
int snd_buf=500;
int rcv_buf=1000;
int state;
socklen_t len;
sock = socket(PF_INET, SOCK_STREAM, 0);
state = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, sizeof(rcv_buf));
if(state)
error_handling("getsockopt() error!");
state = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, sizeof(snd_buf));
if(state)
error_handling("getsockopt() error!");
len = sizeof(snd_buf);
state = getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, &len);
if(state)
error_handling("setsockopt() error!");
len = sizeof(rcv_buf);
state = getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, &len);
if(state)
error_handling("setsockopt() error!");
printf("데이터 입력을 위한 소켓의 버퍼 크기 : %d \n", rcv_buf);
printf("데이터 출력을 위한 소켓의 버퍼 크기 : %d \n", snd_buf);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
/* get_buf.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
void error_handling(char *message);
int main(int argc, char **argv)
{
int sock;
int snd_buf;
int rcv_buf;
int state;
socklen_t len;
sock = socket(PF_INET, SOCK_STREAM, 0);
len = sizeof(snd_buf);
state = getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, &len);
if(state)
error_handling("getsockopt() error");
len = sizeof(rcv_buf);
state = getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, &len);
if(state)
error_handling("getsockopt() error");
printf("데이터 입력을 위한 소켓의 버퍼 크기 : %d \n", rcv_buf);
printf("데이터 출력을 위한 소켓의 버퍼 크기 : %d \n", snd_buf);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
/* get_buf_win.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define BUFSIZE 30
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hSocket;
int sndBuf;
int rcvBuf;
int state;
int len;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
hSocket = socket(PF_INET, SOCK_STREAM, 0);
len=sizeof(sndBuf);
state=getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char*)&sndBuf, &len);
if(state==SOCKET_ERROR)
ErrorHandling("getsockopt() error");
len=sizeof(rcvBuf);
state=getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char*)&rcvBuf, &len);
if(state==SOCKET_ERROR)
ErrorHandling("getsockopt() error");
printf("윈도우즈 입력 버퍼 크기 : %d \n", rcvBuf);
printf("윈도우즈 출력 버퍼 크기 : %d \n", sndBuf);
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
'[+] Information > [-] Network' 카테고리의 다른 글
[2009/06/22] TIME-WAIT 예제소스(reuseaddr.c) (0) | 2009.06.22 |
---|---|
[2009/06/22] TIME-WAIT 상태에 대한 이해 (0) | 2009.06.22 |
[2009/06/22] 소켓의 옵션 조작하기 (0) | 2009.06.22 |
[2009/06/21] 예제소스(gethostbyname.c, gethostbyname_win.c, gethostbyaddr.c, gethostbyaddr_win.c) (0) | 2009.06.21 |