/* make_socket_linux.c */
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handling(char *message);
int main(int argc, char **argv)
{
int tcp_socket;
int udp_socket;
/* 연결지향 TCP 소켓 생성 */
tcp_socket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(tcp_socket==-1)
error_handling("socket() error");
/* 비 연결지향 UDP 소켓 생성 */
udp_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(udp_socket==-1)
error_handling("socket() error");
printf("생성된 TCP 소켓의 파일 디스크립터 : %d \n", tcp_socket);
printf("생성된 UDP 소켓의 파일 디스크립터 : %d \n", udp_socket);
close(tcp_socket);
close(udp_socket);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
/* make_socket_win.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hTCPSock;
SOCEKT hUDPSock;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) !=0) // Load Winsock 2.2 DLL
ErrorHandling("WSAStartup() error!");
/* 연결지향 TCP 소켓 생성 */
hTCPSock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(hTCPSock==INVALID_SOCKET) // INVALID_SOCKET = -1
ErrorHandling("socket() error!);
/* 비 연결지향 UDP 소켓 생성 */
hUDPSock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(hUDPSock==INVALID_SOCKET)
ErrorHandling("socket() error");
printf("생성된 TCP 소켓의 핸들 : %d \n", hTCPSock);
printf("생성된 UDP 소켓의 핸들 : %d \n", hUDPSock);
closesocket(hTCPSock);
closesocket(hUDPSock);
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
전 왜 소스를 보면 리눅스 쪽이 더 쉬워 보이는걸까요 ㄷㄷ
'[+] Information > [-] Network' 카테고리의 다른 글
[2009/05/27] 예제소스(endian_conv.c, endian_conv_win.c, inet_ntoa.c, inet_addr.c, bind_sock_win.c, bind_sock.c) (0) | 2009.05.27 |
---|---|
[2009/05/27] 주소 체계와 데이터 정렬 (0) | 2009.05.27 |
[2009/05/26] 소켓의 생성과 프로토콜의 설정 (0) | 2009.05.26 |
[2009/5/24] 윈도우즈 기반으로 구현하기 (0) | 2009.05.24 |