본 는 "" 본 . 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 <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <arpa/inet.h> #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); }