Skip to content

Commit daac361

Browse files
author
yubo
committed
update sample udpd
1 parent d7c614b commit daac361

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

src/udpd.c

+27-11
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,30 @@
88
#include <arpa/inet.h>
99
#include<string.h>
1010

11+
#define IPv4(a, b, c, d) ((uint32_t)(((a) & 0xff) << 24) | \
12+
(((b) & 0xff) << 16) | \
13+
(((c) & 0xff) << 8) | \
14+
((d) & 0xff))
15+
1116
#define ERR_EXIT(m) \
1217
do { \
1318
perror(m); \
1419
exit(EXIT_FAILURE); \
1520
} while (0)
1621

22+
#define BIND_ADDR INADDR_ANY
23+
//#define BIND_ADDR IPv4(0,0,0,0)
24+
1725
int main(int argc, char *argv[])
1826
{
19-
int sock, on;
27+
int sock, port, n;
2028
struct sockaddr_in servaddr, peeraddr;
2129
char recvbuf[1024] = {0};
2230
socklen_t peerlen;
23-
int n;
31+
//int on;
32+
2433

25-
if (argc != 2) {
34+
if (!(argc == 2 && (port = atoi(argv[1])))) {
2635
fprintf(stderr, "Usage\n\t%s <port> \n",
2736
argv[0]);
2837
exit(EXIT_FAILURE);
@@ -31,15 +40,19 @@ int main(int argc, char *argv[])
3140
if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
3241
ERR_EXIT("socket error");
3342

34-
on = 1;
35-
setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
43+
//on = 1;
44+
//setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
45+
//
46+
47+
printf("port %d\n", port);
3648

3749
memset(&servaddr, 0, sizeof(servaddr));
3850
servaddr.sin_family = AF_INET;
39-
servaddr.sin_port = htons(atoi(argv[1]));
40-
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
51+
servaddr.sin_port = htons(port);
52+
servaddr.sin_addr.s_addr = htonl(BIND_ADDR);
4153

42-
printf("serv %s:%d \n", inet_ntoa(servaddr.sin_addr), ntohs(servaddr.sin_port));
54+
printf("serv %s:%d \n", inet_ntoa(servaddr.sin_addr),
55+
ntohs(servaddr.sin_port));
4356

4457
if (bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
4558
ERR_EXIT("bind error");
@@ -50,13 +63,16 @@ int main(int argc, char *argv[])
5063
n = recvfrom(sock, recvbuf, sizeof(recvbuf), 0,
5164
(struct sockaddr *)&peeraddr, &peerlen);
5265
if(n == -1) {
53-
5466
if (errno == EINTR)
5567
continue;
56-
5768
ERR_EXIT("recvfrom error");
5869
}else if(n > 0) {
59-
printf("recv %d %s:%d\n", peerlen, inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));
70+
printf("recv(%d) peer from %s:%d\n",
71+
n, inet_ntoa(peeraddr.sin_addr),
72+
ntohs(peeraddr.sin_port));
73+
sendto(sock, recvbuf, n, 0,
74+
(struct sockaddr*)&peeraddr,
75+
sizeof(peeraddr));
6076
fputs(recvbuf, stdout);
6177
}
6278
}

0 commit comments

Comments
 (0)