본 페�지� 코드는 "��호" 본� 것�다. 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);
}










