作者回复: 赞
作者回复: 赞。
作者回复: 赞,下面的内容会讲到这部分了
作者回复: 很清楚,很简洁。
作者回复: 想多了,可以区分出来是不是本地监听端口(被动套接字)的,而且这个在大多数情况下不被允许的。
作者回复: 就是要和操作系统I/O打交道,编程语言的I/O模型是通过抽象和设计,总结出的一套规范。
作者回复: 1 不是等价的
2 没有必要,还徒增了端口冲突的危险。
作者回复: file description,文件描述符。UNIX世界里万物皆文件。
作者回复: 1.客户端一定需要预先知道待连接的服务器端的地址和端口,至于怎么让客户端知道,通过配置,启动参数,都是可以的;
2.加1的目的是为了对这个报文进行唯一性确认,防止报文串掉了,这样我们就无法知道谁跟谁了。
作者回复: 嗯。
作者回复: 我的程序和结果 :
#include "lib/common.h"
int socket_init()
{
struct protoent* protocol = NULL;
protocol=getprotobyname("icmp");
int sock=socket(AF_INET,SOCK_RAW,protocol->p_proto);
if(sock == -1){
error(1,errno,"create socket failed");
}
return sock;
}
int main(int c, char **v) {
printf("socket %d \n", socket_init());
printf("socket %d \n", socket_init());
}
socket 3
socket 4
作者回复: 1.两个不是一个东西,一个是套接字地址,一个是套接字,都需要设置。
2.unreachable是被动收到了其他网络涉笔发来的ICMP报文信息,而timeout是在尝试一段时间后主动放弃的。
作者回复: 因为三次握手是最简洁的方式,已经足够完成信息的确认。
作者回复: 这是有原因的,不需要每次都换端口,下面会降到具体解法。
作者回复: 非阻塞,是指I/O模型,不是等待数据或连接,还是通过I/O通知的方式来感知数据或连接。
后面的章节会详细讲述非阻塞模型