tcpcliserv目录下执行make命令没有生成tcpcli11
没有tcpcli11
今天在学习unp 5.13章节SIGPIPE信号时,需要执行tcpcli11程序,但是make命令执行后并没有生成tcpcli11而且make也没有报错,一番查找之后发现Makefile中没有将tcpcli11作为要生成的目标程序,如下图:
[root@localhost tcpcliserv]# more Makefile
include ../Make.defines
PROGS = tcpcli01 tcpcli04 tcpcli05 tcpcli06 \
tcpcli07 tcpcli08 tcpcli09 tcpcli10 \
tcpserv01 tcpserv02 tcpserv03 tcpserv04 \
tcpserv08 tcpserv09 tcpservselect01 tcpservpoll01 tsigpipe
all: ${PROGS}
...
添加tcpcli11之后重新make即可
[root@localhost tcpcliserv]# more Makefile
include ../Make.defines
PROGS = tcpcli01 tcpcli04 tcpcli05 tcpcli06 \
tcpcli07 tcpcli08 tcpcli09 tcpcli10 tcpcli11\
tcpserv01 tcpserv02 tcpserv03 tcpserv04 \
tcpserv08 tcpserv09 tcpservselect01 tcpservpoll01 tsigpipe
all: ${PROGS}
...
tcpcli11连接失败
执行tcpcli11后出现连接服务器失败
[root@localhost tcpcliserv]# ./tcpserv04 &
[1] 1710
[root@localhost tcpcliserv]# ./tcpcli11 127.0.0.1
connect error: Connection refused
看了下tcpcli11.c的源码,端口设置出了点问题,将17行的htons的参数改为SERV_PORT重新编译即可
1 /* Use standard echo server; baseline measurements for nonblocking version */
2 #include "unp.h"
3
4 int
5 main(int argc, char **argv)
6 {
7 int sockfd;
8 struct sockaddr_in servaddr;
9
10 if (argc != 2)
11 err_quit("usage: tcpcli <IPaddress>");
12
13 sockfd = Socket(AF_INET, SOCK_STREAM, 0);
14
15 bzero(&servaddr, sizeof(servaddr));
16 servaddr.sin_family = AF_INET;
17 servaddr.sin_port = htons(SERV_PORT); // 修改为SERV_PORT
18 Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
19
20 Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
21
22 str_cli(stdin, sockfd); /* do it all */
23
24 exit(0);
25 }
可以通过查看tcpserv04.c代码看到hton传入的也是SERV_PORT,SERV_PORT是unp.h中定义好的端口,值为9877
[root@localhost tcpcliserv]# grep "SERV_PORT" ../lib/unp.h
#define SERV_PORT 9877 /* TCP and UDP */
#define SERV_PORT_STR "9877" /* TCP and UDP */
/* $$.ix [SERV_PORT]~constant,~definition~of$$ */