如果函数调用成功,会返回一个标识这个套接字的文件描述符,失败的时候返回-1。...类型为SOCK_STREAM的套接字表示一个双向的字节流,与管道类似。流式的套接字在进行数据收发之前必须已经连接,连接使用connect()函数进行。...errno 函数socket()并不总是执行成功,有可能会出现错误,错误的产生有多种原因,可以通过errno获得: 表3 errno的值及含义 值 含义 EACCES 没有权限建立制定的domain的type...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。
函数 简单介绍 nn_socket 创建一个套接字 nn_setsockopt 设置套接字的选项 nn_bind 绑定地址 nn_connect 连接另一个套接字 nn_send 发送数据 nn_recv...返回值:返回套接字。 nn_setsockopt 所在头文件:#include ,作用和原始socket开发中的setsockopt类似,用来设置套接字的选项。...nn_connect 所在头文件:#include ,作用连接另一个套接字。...int nn_connect(int s, const char *addr); 参数: s:上面的函数nn_socket的返回值; *addr:连接的地址; 返回值:返回小于零表示失败。...= env->GetStringUTFChars(sendmsg_, 0); try { //创建PAIR的套接字 int pair_socket = nn_socket
常见的错误码包括EACCES(权限不足)、EADDRINUSE(地址已经被占用)、EAFNOSUPPORT(地址族不支持)、EINVAL(参数无效)、EMFILE(达到进程允许打开的最大文件数目)、ENFILE...常见的错误包括EACCES(权限不足)、EADDRINUSE(地址已经被使用)、EADDRNOTAVAIL(地址不可用)、EAFNOSUPPORT(地址族不支持该套接字类型)、EINVAL(套接字未打开...如果出现错误,返回-1,并设置errno错误号。此时可以通过perror()函数来打印出错误信息。 注意事项 在调用recvfrom函数之前,需要先使用bind函数将socket绑定到一个地址上。...这可能是因为buf指向的空间长度为0,或者在使用UDP协议时,sendto函数成功地发送了0字节的数据。 如果返回值等于-1,表示发送过程中出现了错误。...此外,在使用sendto函数之前,需要确保已经通过socket函数创建了一个套接字,并且(对于面向连接的套接字类型)已经通过connect函数与目标地址建立了连接(尽管对于UDP,连接通常不是必需的,但也可以通过
返回新套接字的文件描述符,或者返回-1表示错误。)...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。 1)write的返回值大于0,表示写了部分或者是全部的数据。 2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。...每一个除send外的Socket函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回 SOCKET_ERROR。
TCP/IP协议存在于OS中,网络服务通过OS提供,在OS中增加支持TCP/IP的系统调用——Berkeley套接字,如Socket,Connect,Send,Recv等 UDP(User Data...而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。
概念 socket又称“套接字”,socket在应用层和传输层之间,我们的应用层只要将数据传递给socket就可以了,socket会传递给传输层、网络层等。 网络通信其实就是Socket之间的通信。...(套接字描述符是一个整数类型的值),如果失败就返回-1 ---- connect连接到服务器 作用:用来将参数sockfd 的socket 连至参数serv_addr 指定的网络地址 int connect...= 0) { NSLog(@"失败"); return; } 参数介绍 套接字描述符 指向结构体sockaddr_in的指针,其中包括目的端口和IP地址等 struct sockaddr_in...使用 send 时套接字必须已经连接。send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。...所保证的仅是当send 成功返回时,数据已经无错误地发送到网络上。
方法处崩溃,是因为TCP套接字发送缓冲区的大小为131768字节,在发送前130000个字节的时候发送缓冲区还未满,因此write方法返回成功,接着继续发送 用抓包工具抓包: 假设server和client...当一个进程向某个已收到RST的套接字执行写操作时,(此时写操作返回EPIPE错误)内核向该进程发送一个SIGPIPE信号,该信号的默认行为是终止进程,因此进程必须捕获它以免不情愿地被终止; 继续修改客户端程序如下...错误) 抓包信息如下: 上述情况会引发一个问题:服务器主机进程终止或者崩溃后重启,客户端在不write的情况下不会知道,read会返回ECONNRESET错误或者超时; 解决方法用select: 1....如果对端TCP发送一个FIN(对端进程终止),那么该套接字变为可读,并且read返回0; 2....如果对端TCP发送一个RST(对端主机崩溃并重新启动),那么该套接字变为可读,并且read返回-1,而errno中含有确切的错误码; 这个问题在select详解中讲述 情况三: 修改客户端程序如下,服务端不变
类型描述SOCK_DGRAM数据报套接字SOCK_RAW原始套接字SOCK_SEQPACKET有序分组套接字SOCK_STREAM字节流套接字 --protocol参数:选择所给定domain和type...一般只能将一个套接字端点绑定到一个给定的地址上,尽管有些协议允许多重绑定。 如果调用connect()或listen(),但没有将地址绑定到套接字上,系统会选一个默认地址去绑定。...套接字地址的获得: a.可以调用getsockname()来发现绑定到套接字上的地址。 b.如果套接字已经和对方连接,可以调用getpeername()来找到对方的地址。...建立连接--connect() 如果要处理一个面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在交换数据前,需要在客户端进程的套接字和服务端进程的套接字之间建立一个连接。...),sendto可以在无连接的套接字上指定一个目标地址。
有序分组套接字 SOCK_RAW 原始套接字 表2 套接字类型 protocol表示某个协议类型常值,或者设置为0,以选择family和type组合的系统默认值,但并不是所有的family和type...指定了协议族(IPv4、Ipv6或Unix)和套接字类型(字节流、数据报或原始套接字),并没有指定本地协议地址或远程协议地址。...若失败返回-1 sockfd:socket函数返回的套接字描述符 servaddr:套接字地址结构的指针 addrlen:套接字地址结构的大小 套接字地址结构必须含有服务器的IP地址和端口号...客户端在调用connect函数前不必非要调用bind函数,因为如果需要的话,内核会确认源IP地址,并选择一个临时端口作为源端口。 ...如果是TCP套接字,调用connect函数会激发TCP三次握手,而且仅在连接建立成功或失败时才会返回。
根据美国计算机历史博物馆的记载,Croker写道:“命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。”...这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。
成功返回0;失败则返回-1,并设置了全局变量errno,应该处理connect函数返回的错误码。...失败时返回的错误码: 错误码 含义 EACCES,EPERM 用户在未启用套接字广播标志的情况下尝试连接到广播地址,或者由于本地防火墙规则,连接请求失败。 EADDRINUSE 本地地址已在使用中。...例如,在尝试将UNIX域数据报套接字连接到流套接字时,可能会发生此错误。 ETIMEDOUT 尝试连接时超时。服务器可能太忙,无法接受新连接。...注意,对于IP套接字,当服务器上启用Syncookie时,超时可能很长。...send错误码: 错误码 含义 EACCES 对目标套接字文件的写入权限被拒绝,或者对路径前缀为的目录之一的搜索权限被拒绝。(对于UDP套接字)尝试发送到网络/广播地址,好像它是单播地址一样。
TCP/IP协议存在于OS中,网络服务通过OS提供,在OS中增加支持TCP/IP的系统调用——Berkeley套接字,如Socket,Connect,Send,Recv等 UDP(User Data...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...连接出现连接不上的问题,一般是网路出现问题或者网卡超负荷或者是连接数已经满啦。
在浏览器上可以浏览目录里的文件和下级目录。 如果点击文件,则把文件打开传给浏览器(浏览器能够自动显示图片、PDF,或 HTML、CSS、JavaScript 以及文本文件)。...原始套接口(SOCK_RAW) 这种套接口允许进程直接存取下层的协议。 现在全世界的人都在解决 C10K 问题。...典型:多个描述字多路复用,比如交互式输入和网络套接字。 出现粘包如何处理? UDP与原始套接口 UDP协议中发送数据大于缓冲区大小,系统如何处理,说明理由。...利用原始套接口发送 icmp 回射请求,等待对方的应答,应答中包含请求的标识符、序列号、时间戳 简述traceroute程序的功能与实现原理。...int listen(int sockfd, int backlog); // 成功则返回0,失败返回-1,错误原因存于errno accept 当服务请求到达 accept 监视的 socket(
这篇我们介绍一下在Android下使用PAIR模式的简单封装。...JNIEnv *env, jobject, jint socketid_ ) { int closesocket = -1; try { //关闭套接字...closesocket; } } catch (int e) { char errmsg[100]; sprintf(errmsg, "关闭套接字失败...面两个其实就是把我们通过JNI调用NanoMsg的都已经简单的做好了,下一步我们就可以根据这里设置好的进行PAIR的操作了, PAIR的封装 微卡智享 新建一个NNPAIR的类,主要就是保留当我们初始化后返回的套接字...,所以定义了一个pairsocket,后面的操作都是根据传入这个套接字进行处理的。
如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。...如果往一个套接字(如sv[0])中写入后,再从该套接字读时会阻塞,只能在另一个套接字中(sv[1])上读成功; 3. 读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。...返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...返回值:成功则返回实际传送出去的字符数, 失败返回-1....收到数据为: it is a test 程序分析:由套接字sock[1]发数据到本地主机,由套接字sock[0]接收发送过来的数据。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。
Unix套接字好像是套接字和管道的混合,socketpair()可以创建一对无命名的、相互连接的Unix域套接字。 管道历史上,它们是半双工的(数据只能在一个方向上流动),但是现在也有全双工管道。...如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。...如果往一个套接字(如sockfd[0])中写入后,再从该套接字读时会阻塞,只能在另一个套接字中(sockfd[1])上读成功; 3....返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...返回值:成功则返回实际传送出去的字符数, 失败返回-1. 错误原因存于errno.
1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道。在展开说明之前,咱们先来聊聊套接字的由来。...2 通道类型 Java 套接字通道包含三种类型,分别是 类型 说明 DatagramChannel UDP 网络套接字通道 SocketChannel TCP 网络套接字通道 ServerSocketChannel...TCP 服务端套接字通道 Java 套接字通道类型对应于两种通信协议 TCP 和 UDP,这个大家应该都知道。...非阻塞模式虽然不会阻塞线程,但是在方法返回后,还要进行循环检测,线程实际上还是被阻塞。...出现这个问题的原因是和 Java NIO 套接字通道的 IO 模型有关,套接字通道采用的是“同步非阻塞”式 IO 模型,用户发起一个 IO 操作后,即可去做其他事情,不用等待 IO 完成。
@当需要编写自己的IP数据包首部时,可以在原始套接字上设置套接字选项IP_HDRINCL.在不设置这个选项的情况下,IP协议自动填充IP数据包的首部。 .../n");exit(1);} 原始套接字直接使用IP协议的套接字,所以是非面向连接的。在这个套接字上可以调用connect和bind函数,分别执行绑定对方和本地地址。 ...发送数据包 使用原始套接字发送数据包必须遵循以下规则:1.如果没有用connect函数绑定对方地址时,则应使用sendto或sendmsg函数发送数据包,在函数参数中指定对方地址。如?...在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。 ...3.如果原始套接字调用connect函数指定了对方的IP地址,则到达的IP数据包的源IP地址秘须与这它相同
) AF_LOCAL(UNIX协议) AF_ROUTE(路由套接字) AF_KEY(秘钥套接字) type: 指定使用的套接字的类型:SOCK_STREAM(字节流套接字) SOCK_DGRAM...protocol: 如果套接字类型不是原始套接字,那么这个参数就为0 2、int bind(int sockfd, struct sockaddr *myaddr, int addrlen)...小于0表示出现了错误.如果错误为EINTR说明读是由中断引起的, 如果是ECONNREST表示网络连接出了问题.参数nbyte是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移...在网络程序中,当我们向套接字文件描述符写时有俩种可能. 1)write的返回值大于0,表示写了部分或者是全部的数据. 2)返回的值小于0,此时出现了错误.我们要根据错误类型来处理....如果错误为EINTR表示在写的时候出现了中断错误. 如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接).
在许多操作系统中,套接字描述符和其他I/O描述符是集成在一起的,所以应用程序可以对文件进行套接字I/O或I/O读/写操作。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...连接出现连接不上的问题,一般是网路出现问题或者网卡超负荷或者是连接数已经满啦。
领取专属 10元无门槛券
手把手带您无忧上云