socket函数创建的socket类型
时间: 2023-10-10 17:10:38 浏览: 29
socket函数创建的socket类型有以下几种:
1. SOCK_STREAM:流式套接字,提供面向连接的可靠数据传输服务,使用TCP协议。
2. SOCK_DGRAM:数据报套接字,提供无连接的不可靠数据传输服务,使用UDP协议。
3. SOCK_RAW:原始套接字,可用于操作IP层或更底层协议,如ICMP、IGMP等。
4. SOCK_SEQPACKET:顺序数据包套接字,提供面向连接的可靠数据传输服务,但保证数据包按照发送顺序接收。
5. SOCK_RDM:可靠数据传输套接字,但不保证数据包按照发送顺序接收。
相关问题
socket函数参数
socket函数是用于创建一个套接字的函数,它的参数如下:
1. domain:指定套接字的协议族,常见的有AF_INET(IPv4)和AF_INET6(IPv6)。
2. type:指定套接字的类型,常见的有SOCK_STREAM(流式套接字,用于TCP协议)和SOCK_DGRAM(数据报套接字,用于UDP协议)。
3. protocol:指定套接字所使用的协议,通常为0,表示根据domain和type自动选择合适的协议。
示例代码如下:
```c
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
```
socket函数返回值
在调用socket读写函数read()和write()时,都会有返回值。如果没有正确处理返回值,就可能引入一些问题。具体来说,socket函数的返回值有以下几种情况:
1. read()函数返回值为-1时,表示读取数据出错,需要根据errno的值来判断具体错误原因。
2. read()函数返回值为0时,表示对端已经关闭了socket,这时候也要关闭这个socket,否则会导致socket泄露。
3. write()函数返回值为-1时,表示写入数据出错,需要根据errno的值来判断具体错误原因。
4. 对于非阻塞的connect,可能返回-1。这时需要判断errno,如果errno == EINPROGRESS,表示正在处理中,否则表示连接出错了,需要关闭重连。之后使用select,检测到该socket的可写事件时,要判断getsockopt(c->fd, SOL_SOCKET, SO_ERROR, &err, &errlen),看socket是否出错了。如果err值为0,则表示connect成功;否则也应该关闭重连。