- 论坛徽章:
- 0
|
纯菜鸟问题
- u8 buf[NET_FRAME_LENGTH]
- struct linger linger = { 0 };
- linger.l_onoff = 0;
- linger.l_linger = 0;
- status = setsockopt(listenfd,SOL_SOCKET, SO_LINGER,(const char *) &linger,sizeof(linger));
- if (-1 == status)
- {
- perror("setsockopt(...,SO_LINGER,...)");
- }
-
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(AUTH_PORT);
- bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
- listen(listenfd, 5);
- for ( ; ; ) {
- int connfd;
- clilen = sizeof(cliaddr);
- printf("87 ok! listenfd is %d \n",listenfd);
- connfd = accept(listenfd, (SA *) &cliaddr, &clilen);
- //slaveSocket = accept(serverSocket,(struct sockaddr *) &clientName, &clientLength);
- buf_len = 0;
- while(0<(rc= read(connfd, &buf[buf_len], NET_FRAME_LENGTH)))//NET_FRAME_LENGTH = 14
- {
- buf_len += rc;
- if (NET_FRAME_LENGTH == buf_len)
- {
- break;
- }
- }
- if (buf_len < NET_FRAME_LENGTH)
- {
- close(connfd);
- continue;
- }
- write(connfd, buf, NET_FRAME_LENGTH);
- close(connfd);
- }
复制代码
1、(const char *) &linger linger是个stuct的对象 它变成(const char *)的结果是什么呢 难道是0,0? 已开始的赋值{0} 是什么意思
2、 accept和getpeername的第二个参数都是cliaddr 为什么指针类型不一样
3、 为什么accept的时候不填充cliaddr吗?非要getpeername在填充一次才能获取cliaddr的值?
4、read(connfd, &buf[buf_len], NET_FRAME_LENGTH) 第二个参数为什么不直接写&buf 为什么要写成&buf[buf_len] 还有为什么buf的类型是u8而不是u什么char
5、最后一个问题for ( ; ; ) 是不是死循环?如果是为什么不用while(1)? |
|