所谓socket套接字,指的是在网络通信以前建立的通信接口。进行网络连接以前,需要向系统注册申请一个新的socket。然后使用这个socket进行网络连接。
提示:套接字=传输层协议+端口号+IP地址。
在进行网络连接以前,需要用socket函数向系申请一个通信端口。这个函数的使用方法如下所示。
int socket(int domain, int type, int protocol);
在参数表表中,domain 指定使用何种的地址类型。type参数的作用是设置通信的协议类型。参数protocol用来指定socket所使用的传输协议编号。这一参数通常不具体设置,一般设置为0即可。
在使用这个函数建立套接字以前,需要在程序的最前面包含下面的头文件。
#include <sys/types.h>
#include <sys/socket.h>
如果建立套接字成功,则返回这个套接字的编号。如果不成功,则返回-1。这个函数可能发生的错误与含义如下所示。
EPROTONOSUPPORT:参数domain指定的类型不支持参数type或protocol指定的协议
ENFILE:核心内存不足,无法建立新的socket结构
EMFILE:进程文件表溢出,无法再建立新的套接字。
EACCESS :权限不足,无法建立type或protocol指定的协议。
ENOBUFS、ENOMEM:内存不足。
EINVAL:参数不合法。
注意:只创建套接字无法进行正常的网络体系,要想和其它计算机通信还必须借助于其它函数将建立的套接字与IP地址和端口号联系起来。
DEMO:
static int udp_example()
{
int sockfd;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
return -1;
}
return 0;
}
取得socket状态:函数getsockopt可以取得一个socket的参数。这个函数的使用方法如下所示。
int getsockopt(int s,int level,int optname,void* optval,socklen_t* optlen);
在参数列表中,s是已经建立socket的编号。level代表需要设置的网络层,一般设成SOL_SOCKET来表示socket层。参数optname代码的是需要获取的选项,可以设置成下面这些值。
SO_DEBUG:打开或关闭排错模式。
SO_REUSEADDR:允许在bind函数中本地地址可重复使用。
SO_TYPE:返回socket形态。
SO_ERROR:返回socket已发生的错误