본 드는 "" 본 것다. 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);
}










