C语言中等待socket连接和对socket定位的方法_C 语言

C语言listen()函数:等待连接
头文件:

#include <sys/socket.h>

定义函数:

int listen(int s, int backlog);

函数说明:listen()用来等待参数s 的socket 连线. 参数backlog 指定同时能处理的最大连接要求, 如果连接数目达此上限则client 端将收到ECONNREFUSED 的错误. Listen()并未开始接收连线, 只是设置socket 为listen 模式, 真正接收client 端连线的是accept(). 通常listen()会在socket(), bind()之后调用, 接着才调用accept().

返回值:成功则返回0, 失败返回-1, 错误原因存于errno

附加说明:listen()只适用SOCK_STREAM 或SOCK_SEQPACKET 的socket 类型. 如果socket 为AF_INET 则参数backlog 最大值可设至128.

错误代码:
   EBADF 参数sockfd 非合法socket 处理代码
   EACCESS 权限不足
   EOPNOTSUPP 指定的socket 并未支援listen 模式.

C语言bind()函数:对socket定位
头文件:

#include <sys/types.h>  #include <sys/socket.h>

定义函数:int bind(int sockfd, struct sockaddr * my_addr, int addrlen);

函数说明:bind()用来设置给参数sockfd 的socket 一个名称. 此名称由参数my_addr 指向一sockaddr 结构,对于不同的socket domain 定义了一个通用的数据结构

struct sockaddr
{
  unsigned short int sa_family;
  char sa_data[14];
};

1、sa_family 为调用socket()时的domain 参数, 即AF_xxxx 值.
2、sa_data 最多使用14 个字符长度.

此sockaddr 结构会因使用不同的socket domain 而有不同结构定义, 例如使用AF_INET domain,其socketaddr 结构定义便为

struct socketaddr_in
{
  unsigned short int sin_family;
  uint16_t sin_port;
  struct in_addr sin_addr;
  unsigned char sin_zero[8];
};

struct in_addr
{
  uint32_t s_addr;
};

1、sin_family 即为sa_family
2、sin_port 为使用的port 编号
3、sin_addr. s_addr 为IP 地址 sin_zero 未使用.
参数 addrlen 为sockaddr 的结构长度.

返回值:成功则返回0, 失败返回-1, 错误原因存于errno 中.

错误代码:
1、EBADF 参数sockfd 非合法socket 处理代码.
2、EACCESS 权限不足
3、ENOTSOCK 参数sockfd 为一文件描述词, 非socket.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
socket
c语言socket编程、c语言 socket、c语言socket网络编程、c语言socket聊天室、c语言socket聊天程序,以便于您获取更多的相关知识。

时间: 2024-09-29 06:11:21

C语言中等待socket连接和对socket定位的方法_C 语言的相关文章

C++实现将一个字符串中的字符替换成另一个字符串的方法_C 语言

本文实例讲述了C++实现将一个字符串中的字符替换成另一个字符串的方法,分享给大家供大家参考.具体方法如下: 题目要求: 原地实现字符串中的每个空格替换成"%20",例如输入"We are happy", 输出"We%20are%20happy" 被替换的字符串当然不仅仅是空格,上面只是个例子 这是道很好的题目,也是百度面试中的一道题,题目不难,但是问题得考虑全面.这里给出如下实现代码: #include <iostream> #inc

C++中的多态与虚函数的内部实现方法_C 语言

1.什么是多态 多态性可以简单概括为"一个接口,多种行为". 也就是说,向不同的对象发送同一个消息, 不同的对象在接收时会产生不同的行为(即方法).也就是说,每个对象可以用自己的方式去响应共同的消息.所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数.这是一种泛型技术,即用相同的代码实现不同的动作.这体现了面向对象编程的优越性. 多态分为两种: (1)编译时多态:主要通过函数的重载和模板来实现. (2)运行时多态:主要通过虚函数来实现. 2.几个相关概念 (1)覆盖.

MFC中动态创建控件以及事件响应实现方法_C 语言

本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()

C语言将24小时制转换为12小时制的方法_C 语言

本文实例讲述了C语言将24小时制转换为12小时制的方法.分享给大家供大家参考.具体实现方法如下: /* * 24小时制转换为12小时制 */ #include <stdio.h> int main() { int n, m; printf("Enter a 24-hour time:"); scanf_s("%d:%d",&n,&m); if (n < 0) { printf("Error1!\n"); syst

C语言使用libZPlay录制声音并写到文件的方法_C 语言

本文实例讲述了C语言使用libZPlay录制声音并写到文件的方法.分享给大家供大家参考.具体实现方法如下: /** * Record samples from line-in and save to out.mp3 * */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <olectl.h> #include <ole2.h> #include <stdio.h> #include <

讲解C++中的枚举类型以及声明新类型的方法_C 语言

C++枚举类型如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内.声明枚举类型用enum开头.例如: enum weekday{sun, mon, tue, wed, thu, fri, sat}; 上面声明了一个枚举类型weekday,花括号中sun, mon, -, sat等称为枚举元素或枚举常量.表示这个类型的变量的值只能是以上7个值之一.它们是用户自己定义的标识符. 声明枚举类型

C语言中对文件最基本的读取和写入函数_C 语言

C语言read()函数:读文件函数(由已打开的文件读取数据)头文件: #include <unistd.h> 定义函数: ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

在C++程序中开启和禁用Windows设备的无线网卡的方法_C 语言

1.列出当前网卡:SetupDiEnumDeviceInfo 2.找出当前无线网卡的名字(用natvie wifi api) 3.卸载\安装此驱动 问题: log为:SetupDiSetClassInstallParams failed. -536870347   完整代码如下: // ControlWirelessCard.cpp : Defines the entry point for the console application. // #include "stdafx.h"

c++中的消息框messagebox()详细介绍及使用方法_C 语言

1.MessageBox("这是一个最简单的消息框!"); 2.MessageBox("这是一个有标题的消息框!","标题"); 3.MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL ); 4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION ); 5.MessageBox(&