Mercurial > repos > rhope
annotate runtime/net.c @ 184:c6ba9fe45910
Strip _c from filenames of current compiler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 27 Jul 2011 21:28:43 -0700 |
parents | 47ab97730865 |
children |
rev | line source |
---|---|
142
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #include <sys/types.h> |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #include <sys/socket.h> |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #include <netdb.h> |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include <netinet/in.h> |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include <string.h> |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include <stdio.h> |
165
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
7 #include <signal.h> |
142
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 int _internal_accept(int sockfd, char * addrbuf, int buflen) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 int retfd; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 socklen_t addr_size; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 struct sockaddr_storage remote_addr; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 addr_size = sizeof(remote_addr); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 retfd = accept(sockfd, (struct sockaddr *)&remote_addr, &addr_size); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 if (addrbuf && buflen) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 addrbuf[0] = '\0'; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 if(retfd == -1) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 return retfd; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 switch(remote_addr.ss_family) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 case AF_INET: |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 inet_ntop(AF_INET, &(((struct sockaddr_in *)&remote_addr)->sin_addr), addrbuf, buflen); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 break; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 case AF_INET6: |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)&remote_addr)->sin6_addr), addrbuf, buflen); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 break; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 return retfd; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 int _internal_bindnewsocket(unsigned int port, int setreuse) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 char portstr[6]; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 int sockfd,flag=1; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 struct addrinfo hints, *localaddr; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 |
152
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
41 snprintf(portstr, 6, "%d", port & 0xFFFF); |
142
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 memset(&hints, 0, sizeof(hints)); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 hints.ai_family = AF_UNSPEC; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 hints.ai_socktype = SOCK_STREAM; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 hints.ai_flags = AI_PASSIVE; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 getaddrinfo(NULL, portstr, &hints, &localaddr); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 sockfd = socket(localaddr->ai_family, localaddr->ai_socktype, localaddr->ai_protocol); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 if (sockfd == -1) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 freeaddrinfo(localaddr); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 return sockfd; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 if(setreuse) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,&flag,sizeof(int)); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 if(-1 == bind(sockfd, localaddr->ai_addr, localaddr->ai_addrlen)) |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 { |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 close(sockfd); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 sockfd = -1; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 freeaddrinfo(localaddr); |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 return sockfd; |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 } |
7bbdc034e347
Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 |
152
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
67 int _internal_connectnewsocket(char * addr, int32_t port) |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
68 { |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
69 char portstr[6]; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
70 struct addrinfo hints, *res; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
71 int sock; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
72 |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
73 memset(&hints, 0, sizeof(hints)); |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
74 hints.ai_family = AF_UNSPEC; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
75 hints.ai_socktype = SOCK_STREAM; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
76 |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
77 snprintf(portstr, 6, "%d", port & 0xFFFF); |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
78 if(getaddrinfo(addr, portstr, &hints, &res)) |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
79 return -1; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
80 if(-1 == (sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol))) |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
81 return -1; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
82 |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
83 if(connect(sock, res->ai_addr, res->ai_addrlen)) |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
84 { |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
85 close(sock); |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
86 sock = -1; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
87 } |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
88 freeaddrinfo(res); |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
89 return sock; |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
90 } |
e9a8269384bb
Add support for opening a new TCP connection and fix bug in Read Delim
Mike Pavone <pavone@retrodev.com>
parents:
142
diff
changeset
|
91 |
165
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
92 int _internal_ignoresigpipe() |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
93 { |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
94 struct sigaction act; |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
95 memset(&act, 0, sizeof(act)); |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
96 act.sa_handler = SIG_IGN; |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
97 return sigaction(SIGPIPE, &act, NULL); |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
98 } |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
152
diff
changeset
|
99 |