fcntl socket
时间: 2023-09-01 10:09:45 浏览: 61
fcntl函数是一个文件控制函数,用于改变打开文件的性质。在网络编程中,可以使用fcntl函数来改变套接字的阻塞/非阻塞状态。
示例代码中的第一个函数是用来开启非阻塞I/O的。首先通过socket函数创建一个套接字,然后使用fcntl函数的F_GETFL参数获取套接字当前的状态。如果获取状态失败,则会返回-1。接着使用fcntl函数的F_SETFL参数将套接字的状态设置为非阻塞,并将原来的状态与O_NONBLOCK进行按位或运算。如果设置失败,则会返回-1。最后,可以根据实际需要进行具体的操作。
第二个函数是用来关闭非阻塞I/O,将套接字设置为阻塞态。同样,首先通过socket函数创建套接字,然后使用fcntl函数的F_GETFL参数获取套接字当前的状态。如果获取状态失败,则会返回-1。接着将状态与O_NONBLOCK进行按位取反运算,将O_NONBLOCK位清零。最后,使用fcntl函数的F_SETFL参数将套接字的状态设置为阻塞态。如果设置失败,则会返回-1。
在示例代码的引用中,可以看到在执行非阻塞连接时,可能会出现Resource temporarily unavailable的错误。这是因为在非阻塞模式下,connect函数可能无法立即完成连接,而会返回EINPROGRESS错误。此时可以使用select函数等待连接是否建立成功。
因此,fcntl函数可以用来改变套接字的阻塞/非阻塞状态,并根据操作的需要进行相应的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [使用fcntl()函数设置socket为阻塞态或非阻塞态](https://blog.csdn.net/modi000/article/details/105521614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [socket 中 fcntl(),select()的介绍](https://blog.csdn.net/bravegogo/article/details/50673333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Socket,非阻塞,fcntl](https://blog.csdn.net/weixin_34358365/article/details/86470240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)