ioctlsocket() 的意义

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 ioctlsocket()

  简述:
  控制套接口的模式。
  #include <winsock.h>
  int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);
  s:一个标识套接口的描述字。
  cmd:对套接口s的操作命令。
  argp:指向cmd命令所带参数的指针。
  注释:
  本函数可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而与具体协议或通讯子系统无关。支持下列命令:
   FIONBIO:允许或禁止套接口s的非阻塞模式。argp指向一个无符号长整型。如允许非阻塞模式则非零,如禁止非阻塞模式则为零。当创建一个套接口 时,它就处于阻塞模式(也就是说非阻塞模式被禁止)。这与BSD套接口是一致的。WSAAsynSelect()函数将套接口自动设置为非阻塞模式。如果 已对一个套接口进行了WSAAsynSelect() 操作,则任何用ioctlsocket()来把套接口重新设置成阻塞模式的试图将以WSAEINVAL失败。为了把套接口重新设置成阻塞模式,应用程序必 须首先用WSAAsynSelect()调用(IEvent参数置为0)来禁至WSAAsynSelect()。
  FIONREAD:确定套接 口s自动读入的数据量。argp指向一个无符号长整型,其中存有ioctlsocket()的返回值。如果s是SOCKET_STREAM类型,则 FIONREAD返回在一次recv()中所接收的所有数据量。这通常与套接口中排队的数据总量相同。如果S是SOCK_DGRAM 型,则FIONREAD返回套接口上排队的第一个数据报大小。
  SIOCATMARK:确实是否所有的带外数据都已被读入。这个命令仅适用于 SOCK_STREAM类型的套接口,且该套接口已被设置为可以在线接收带外数据(SO_OOBINLINE)。如无带外数据等待读入,则该操作返回 TRUE真。否则的话返回FALSE假,下一个recv()或recvfrom()操作将检索“标记”前一些或所有数据。应用程序可用 SIOCATMARK操作来确定是否有数据剩下。如果在“紧急”(带外)数据前有常规数据,则按序接收这些数据(请注意,recv()和 recvfrom()操作不会在一次调用中混淆常规数据与带外数据)。argp指向一个BOOL型数,ioctlsocket()在其中存入返回值。
  兼容性:
  本函数为Berkeley套接口函数ioctl()的一个子集。其中没有与FIOASYNC等价的命令,SIOCATMARK是套接口层次支持的唯一命令。
  返回值:
  成功后,ioctlsocket()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。
  错误代码:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEINVAL:cmd为非法命令,或者argp所指参数不适用于该cmd命令,或者该命令
  不适用于此种类型的套接口。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAENOTSOCK:描述字不是一个套接口。
  参见:
  socket(), setsockopt(), getsockopt(), WSAAsyncSelect().

本文转自:http://blog.csdn.net/gxj1680/archive/2009/01/06/3722084.aspx
socket网络编程中设置socket选项的ioctlsocket、setsockoptWSAIoctl函数的使用(附源码) 阅读详情

相关推荐

网络编程——非阻塞模式(ioctlsocket

#include   #include              //winsock.h (2种套接字版本)  #pragma comment(lib,"ws2_32.lib") //wsock32.lib   #define MAXSIZE 100 //   int main()  {      //      int retVal;       char buf[MAXSIZE];

心之所向,身之所往 4899

winsocket tcp 非阻塞实例

在 Winsocket 一:单线程阻塞server&client程序(tcp) Winsocket 二:多线程阻塞服务器程序(tcp)介绍了阻塞tcp程序,阻塞式tcp程序服务器程序会因为建立连接关闭连接而频繁的创建关闭线程会产生大量的内存碎片,从而导致服务端程序不能保证长时间的稳定运行,本文简单介绍非阻塞式tcp程序的编写。 一、非阻塞 阻塞是指在进行一个操作的时候,如服务器接收客户端的连接(accept),客户端程序执行connect操作,服务器或者客户端读写数据(r...

dragon_cdut的博客 1953

非阻塞模式(ioctlsocket

1 //Server.cpp 2 #include <stdio.h> 3 #include <winsock2.h> //winsock.h (2种套接字版本) 4 #pragma comment(lib,"ws2_32.lib") //wsock32.lib ...

banhanjun1518的博客 513

socket的阻塞与非阻塞

文章目录1. 阻塞模式四种阻塞API调用2. 非阻塞模式3. 优缺点对比 阻塞(blocking)、非阻塞(non-blocking): Windows套接字在阻塞非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。 1. 阻塞模式 阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费等待时间。 比如当调用

超级大洋葱的博客 3311

ioctlsocket() 用法

参考一: Select模型与ioctlsocket的使用方法     int iMode = 1; //0:阻塞   ioctlsocket(socketc,FIONBIO, (u_long FAR*) &iMode);//非阻塞设置 rs=recvfrom(socketc,rbuf,sizeof(rbuf),0,(SOCKADDR*)&addr,&l

人生代码,代码人生。。。 1万+

ioctlsocket()函数

简述:  控制套接口的模式。  #include   int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);  s:一个标识套接口的描述字。  cmd:对套接口s的操作命令。  argp:指向cmd命令所带参数的指针。  注释:  本函数可用于任一状态的任一套接口。它用于获取与套接口相关的

Great_Blue_sea的专栏 1681

getsockopt() setsockopt() ioctlsocket() 用法

getsockopt() 简述:   获取一个套接口选项。   #include      int PASCAL FAR getsockopt( SOCKET s, int level, int optname,   char FAR* optval, int FAR* optlen);   s:一个标识套接口的描述字。   level:选项定义的层次。支持的层次仅有SOL

muyiyj的专栏 863

ioctlsocket()

ioctlsocket()ioctlsocket()是一个计算机函数,功能是控制套接口的模式。可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而与具体协议或通讯子系统无关。 FIONBIO: 允许或禁止套接口s的非阻塞模式。argp指向一个无符号长整型,如允许非阻塞模式则非零,如禁止非阻塞模式则为零。当创建一个套接口时,它就处于阻塞模式(也就是说非阻塞模式被禁止)。这与BSD套接口是一致的。WSAAsyncSelect()函数将套接口自动设置为非阻塞模式。如果已对一个套接口进行了WSAAsyn

weixin_41454036的博客 888

ioctlsocket

ioctlsocketThe ioctlsocket function controls the I/O mode of a socket.int ioctlsocket( SOCKET s, long cmd, u_long* argp); Parameterss [in] Descriptor identifying a socket. cmd [in] Comma

flyingfalcon的专栏 1733

winsock之ioctlsocket()

ioctlsocket() 简述:   控制套接口的模式。   #include   int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);   s:一个标识套接口的描述字。   cmd:对套接口s的操作命令。   argp:指向cmd命令所带参数的指针。 编辑本

zgjxhgh 433

socket相关函数(一)————ioctlsocket()

简述:   控制套接口的模式。   #include   int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);   s:一个标识套接口的描述字。   cmd:对套接口s的操作命令。   argp:指向cmd命令所带参数的指针。 注释:   本函数可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而

冷秋魂的专栏 2748

ioctlsocket函数全面解析

说明:这篇博客算不得是原创,是我那里切一块这里剪一块凑来的。 先看看MSDN标准解释 int ioctlsocketSOCKET s, long cmd, u_long FAR *argp ); Parameters s  [in] Descriptor identifying a socketcmd  [in] Command to p

qq_39836658的博客 811

ioctlsocket() 用法 socket recvfrom 阻塞 非阻塞 设置

参考一: Select模型与ioctlsocket的使用方法 int iMode = 1; //0:阻塞 ioctlsocket(socketc,FI...

1562

getsockopt() setsockopt() ioctlsocket() fcntl() 用法

getsockopt() 简述:   获取一个套接口选项。   #include      int PASCAL FAR getsockopt( SOCKET s, int level, int optname,   char FAR* optval, int FAR* optlen);   s:一个标识套接口的描述字。   level:选项定义的层次。支持的层次仅有SOL

blade2001的专栏 6666
上一篇: setsockopt()用法
下一篇: keybd_event的使用
FlowShell
博客等级 码龄17年 119粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值