U E D R , A S I H C RSS

��호/My��브러리

본 페�지� 코드는 "��호" 본� 것�다. 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);
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:32
Processing time 0.0047 sec