- 论坛徽章:
- 0
|
对于连接的UDP套接口,异步错误会返回给进程, 可是为什么还是堵塞在read上没返回呢?- #include <stdlib.h>
- #include <stdio.h>
- #include <strings.h>
- #include <string.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <errno.h>
- #define SER_PORT 9877
- #define MAXLINE 4096
- void dg_cli(FILE *fp, int sockfd, const struct sockaddr *pservaddr, socklen_t servlen)
- {
- int n;
- char sendline[MAXLINE], recvline[MAXLINE+1];
- if(connect(sockfd, (struct sockaddr*)pservaddr, servlen) != 0) {
- printf("connect error: %s\n", strerror(errno));
- exit(1);
- }
- while(fgets(sendline, MAXLINE, fp) != NULL) {
- n = strlen(sendline);
- if(write(sockfd, sendline, strlen(sendline)) != n) {
- printf("write error : %s", strerror(errno));
- exit(1);
- }
-
- n = read(sockfd, recvline, MAXLINE); //在这里没有返回错误
- if(n < 0)
- printf("read error : %s", strerror(errno));
- printf("after n %d\n", n);
- recvline[n] = 0;
- fputs(recvline, stdout);
- }
- }
- int main()
- {
- int sockfd;
- struct sockaddr_in servaddr;
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- inet_pton(AF_INET, "192.168.1.2", (void*)&servaddr.sin_addr);
- servaddr.sin_port = htons(SER_PORT);
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- dg_cli(stdin, sockfd,(struct sockaddr*)&servaddr, sizeof(servaddr));
-
- return 0;
- }
复制代码 |
|