<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%9D%B4%EC%98%81%ED%98%B8%2FMy%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC</id>
	<title>이영호/My라이브러리 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%9D%B4%EC%98%81%ED%98%B8%2FMy%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%9D%B4%EC%98%81%ED%98%B8/My%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC&amp;action=history"/>
	<updated>2026-05-15T05:50:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%9D%B4%EC%98%81%ED%98%B8/My%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC&amp;diff=66653&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:30, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%9D%B4%EC%98%81%ED%98%B8/My%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC&amp;diff=66653&amp;oldid=prev"/>
		<updated>2021-02-07T05:30:32Z</updated>

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