본 페이지의 코드는 "이영호" 본인 것이다. Copyright 네트워크 테스트 때마다 서버 설정하기 귀찮음. 새로운 용도의 라이브러리 제작 {{{~cpp //my_socket.h // 성공시 0, 실패시 -1 반환. (socket에서 에러가 났는지 bind에서 에러가 났는지 구분이 힘들겠지만, socket이 할당 되지 않는 경우는 적으므로 bind 에러임.) // Bind 에러에서도 서버를 재가동 할 경우 resueaddr 로 flag를 설정했기 때문에, Port 에러 뿐임. 이미 Port를 사용할 때만 에러가 남. int tcp_server_init(int *sockfd, struct sockaddr_in *ina, uint16_t port); int udp_server_init(int *sockfd, struct sockaddr_in *ina, uint16_t port); int set_reuseaddr(int *sockfd); // 성공시 0반환 실패시 -1 반환. // set*, get* 함수를 더 만들자. // send 함수 시 인자 4개가 필요하기 때문에 2개로 줄인 함수다. 단, ascii문자만 전달 된다. recv 함수는 만들 필요가 없다. int send_msg(int sockfd, const *msg); }}} {{{~cpp //my_socket.c #include #include #include #include #if !defined(TURE) #define TRUE 1 #endif #if !defined(FALSE) #define FALSE 0 #endif // udp를 함수에 넣어도 되지만 그렇게 되면 다른 종류의 socket 들도 넣어 차후 확장성이 떨어질것 같아 분리함. int tcp_server_init(int *sockfd, struct sockaddr_in *ina, uint16_t port) { int option; *sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(*sockfd == -1) return -1; setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); memset((struct sockaddr *)ina, 0, sizeof(struct sockaddr)); (*ina).sin_family = AF_INET; (*ina).sin_addr.s_addr = INADDR_ANY; (*ina).sin_port = htons(port); if(bind(*sockfd, (struct sockaddr *)ina, sizeof(struct sockaddr)) == -1) return -1; return 0; } int udp_server_init(int *sockfd, struct sockaddr_in *ina, uint16_t port) { int option; *sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if(*sockfd == -1) return -1; setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); memset((struct sockaddr *)ina, 0, sizeof(struct sockaddr)); (*ina).sin_family = AF_INET; (*ina).sin_addr.s_addr = INADDR_ANY; (*ina).sin_port = htons(port); if(bind(*sockfd, (struct sockaddr *)ina, sizeof(struct sockaddr)) == -1) return -1; return 0; } int set_reuseaddr(int *sockfd) { int option; if(setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)) == -1) return -1; return 0; } int send_msg(int sockfd, const *msg) { send(sockfd, msg, strlen(msg), 0); } }}}