博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Advanced Socket Topics
阅读量:2440 次
发布时间:2019-05-10

本文共 3142 字,大约阅读时间需要 10 分钟。

From:

 

For most programmers, the mechanisms already described are enough to build distributed applications. This section describes additional features.

Nonblocking Sockets

Some applications require sockets that do not block. For example, a server would return an error code, not executing a request that cannot complete immediately. This error could cause the process to be suspended, awaiting completion. After creating and connecting a socket, issuing a fcntl (2) call, as shown in the following example, makes the socket non-blocking.

When performing I/O on a nonblocking socket, check for the error EWOULDBLOCK in errno.h , which occurs when an operation would normally block. accept (3SOCKET), connect (3SOCKET), send (3SOCKET), recv (3SOCKET), read (2), and write (2) can all return EWOULDBLOCK . If an operation such as a send (3SOCKET) cannot be done in its entirety but partial writes work, as when using a stream socket, all available data is processed. The return value is the amount of data actually sent.

Asynchronous Socket I/O

Asynchronous communication between processes is required in applications that simultaneously handle multiple requests. Asynchronous sockets must be of the SOCK_STREAM type. To make a socket asynchronous, you issue a fcntl (2) call, as shown in the following example.

After sockets are initialized, connected, and made nonblocking and asynchronous, communication is similar to reading and writing a file asynchronously. Initiate a data transfer by using send (3SOCKET), write (2), recv (3SOCKET), or read (2). A signal-driven I/O routine completes a data transfer, as described in the next section.

Interrupt-Driven Socket I/O

The SIGIO signal notifies a process when a socket, or any file descriptor, has finished a data transfer. The steps in using SIGIO are as follows:

  1. Set up a SIGIO signal handler with the signal (3C) or sigvec (3UCB) calls.

  2. Use fcntl (2) to set the process ID or process group ID to route the signal to its own process ID or process group ID. The default process group of a socket is group 0 .

  3. Convert the socket to asynchronous, as shown in .

The following sample code enables receipt of information on pending requests as the requests occur for a socket by a given process. With the addition of a handler for SIGURG , this code can also be used to prepare for receipt of SIGURG signals.

 

转载地址:http://thbqb.baihongyu.com/

你可能感兴趣的文章
如何反转JavaScript数组
查看>>
如何安装svelte_如何在Svelte中动态应用CSS
查看>>
c#枚举类型_C枚举类型
查看>>
如何在数据库中存储用户密码_如何在数据库中存储密码
查看>>
gatsby_使用Gatsby加载外部JS文件
查看>>
窗口怎么退出扩展窗口_如何创建退出意图弹出窗口
查看>>
docker删除映像_如何将更改提交到Docker映像
查看>>
本地ssl证书生成_如何生成本地SSL证书
查看>>
c语言中的null_如何在C中使用NULL
查看>>
如何在macOS中安装本地SSL证书
查看>>
axios 请求嵌入请求_如何对每个Axios请求强制使用凭据
查看>>
检查node.js版本_如何在运行时检查当前的Node.js版本
查看>>
如何安装svelte_如何在Svelte模板中模拟for循环
查看>>
jsp打印画布_如何将画布打印到数据URL
查看>>
javascript 逗号_如何使用JavaScript将逗号更改为点
查看>>
在JavaScript中,如何判断值的类型?
查看>>
docker删除映像_从命令行使用Docker映像
查看>>
npm 云函数_如何在Netlify函数中使用npm软件包
查看>>
使用Docker Desktop管理容器
查看>>
如何在JavaScript中交换两个数组元素
查看>>