---
title: socket
description: "**socket(int domain, int type, int protocol)**"
url: https://www.hikunpeng.com/document/detail/zh/knet/api/docs/zh/api/posix_apis/socket.md
sourcePath: /source/zh/knet/api/docs/zh/api/posix_apis/socket.md
indexId: ebf522a115a3e832b29ff43aafbb556a9c1fe8c8b0e2450e31f00f91a87a5c4652
---
# socket

## 接口名称

**socket(int domain, int type, int protocol)**

## 接口描述

创建通信节点并返回描述符。

## 参数说明

|参数|说明|备注|
|--|--|--|
|domain|通信域|支持AF_INET。|
|type|通信语义类型|支持SOCK_STREAM、SOCK_DGRAM、SOCK_CLOEXEC（默认支持该type，且不可修改）、SOCK_NONBLOCK。|
|protocol|协议类型|支持IPPROTO_TCP（type必须为SOCK_STREAM）。支持IPPROTO_UDP（type必须为SOCK_DGRAM）。支持IPPROTO_IP，即设置为0。|

## 返回值

类型：int

- 正数：socketfd，表示成功
- -1：表示失败，并设置errno以指示错误类型

## 错误码

|错误码|描述|
|--|--|
|EINVAL|未知协议，或协议族不可用。|
|EMFILE|进程的file数量超过max_tcpcb。|
|ENOMEM|内存申请失败。|
|EPROTONOSUPPORT|domain不支持指定协议。|
|ENAVAIL|KNET资源初始化失败。|
|EACCES|进程没有适当的权限。|
|ENOBUFS|系统中的可用资源不足，无法执行该操作。|
|EMFILE|进程的file数量超过最大文件描述符数。通过ulimit -n查看。|
|ENFILE|系统的file数量超过上限。|
|ELIBBAD|系统库符号加载失败。|
|EPERM|信号退出流程中，不允许调用该函数接口。|
|EINVAL|共线程部署模式时，sockfd的worker id和当前线程的worker id不一致，导致socket跨worker线程调用。|
