03 TCP套接字之socket函数

本文介绍了TCP套接字中的socket函数,包括函数原型、参数解析、调用方法及注意事项。在TCP/IP网络编程中,socket函数用于创建套接字,返回的文件描述符在子进程中会被复制。总结来说,函数参数通常为AF_INET(协议族)、SOCK_STREAM(套接字类型)和0(协议)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在执行网络I/O时, 要做的第一件事就是调用socket函数.


函数原型
#include <sys/socket.h>
int socket(int family, int type, int protocol);

成功 : 返回非负描述符.

失败 : 返回-1, 设置errno的值.

函数错误时返回-1, 但是也会设置相应的errno的值 :

含义
EACCES没有权限建立制定的domain的type的socket
EAFNOSUPPORT不支持所给的地址类型
EINVAL不支持此协议或者协议不可用
EMFILE进程文件表溢出
ENFILE已经达到系统允许打开的文件数量,打开文件过多
ENOBUFS/ENOMEM内存不足
EPROTONOSUPPORT制定的协议type在domain中不存在

函数参数
  • 其中参数family指明的是协议族, 通常也被叫做协议域. 参数可以是(我们只用AF_INET) :

    描述
    AF_INET, PF_INETIPv4 Internet域
    AF_INET6, PF_INET6IPv6 Internet域
    AF_UNIX, PF_UNIXUNIX域(常用于用于本机进程间通信)
    AF_UPSPEC未指定
  • type指明套接字类型, 参数有(TCP中默认设置为SOCK_STREAM) :

    类型描述
    SOCK_STREAMTCP连接, 提供序列化的、可靠的、双向连接的字节流. 支持带外数据传输
    SOCK_DGRAM支持UDP连接(无连接状态的消息)
    SOCK_SEQPACKET有序分组套接字. 序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常。每次调用读系统调用时数据需要将全部数据读出
    SOCK_RAW原始网络协议套接字
  • protocol一般默认为0就行, 参数有 :

    协议描述
    IPPRPTO_IPIPv4 Internet协议
    IPPROTO_TCP传输控制协议
    IPPROTO_UDP用户数据报协议

函数调用成功返回的是一个文件描述符, 毕竟在linux中万物皆文件. 既然返回的是文件描述符, 那么当我们在调用fork函数时一定要注意, 子进程会复制父进程的所有文件描述符哦. 这个问题我们在之后来探讨.


函数的调用

socket函数是很容易上手的.

#include <sys/socket.h>
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0) EXIT("socket");

总结
  • family一般为AF_INET.
  • type一般为SOCK_STREAM.
  • protocol一般置0
  • 返回的是一个文件描述符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值