百科狗-知识改变命运!
--

socket_close() - socket通信函数

百变鹏仔12个月前 (11-21)阅读数 44#技术干货
文章标签资源

socket_close()

socket_close() - socket通信函数

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

关闭套接字资源

说明

socket_close(resource $socket): void

socket_close()会关闭掉给定的$socket资源。这个函数只针对套接字资源有效,不能用在其他类型的资源类型上。

参数

$socket

由socket_create()或者是socket_accept()创建的有效的套接字资源。

返回值

没有返回值。

参见

  • socket_bind()给套接字绑定名字
  • socket_listen()Listens for a connection on a socket
  • socket_create()创建一个套接字(通讯节点)
  • socket_strerror()Return a string describing a socket error
PHP: 5.1.4
Summary: close() does not relinquish socket immediately.
With the BSD socket implementation (which is the socket interface used by PHP), a socket_close() may close the socket, but there may yet be data to send. Until the data is sent, the port will not be available. Therefore, all further bindings attempted on that port will not be acceptable due to the 'port can not be reused' (the approximate message, anyway) error. Ordinarily, if the REUSABLE socket option is set, the only thing that will raise such an error is a binding to a specific IP/PORT combination that is already bound.
To avoid this problem, you must tell it to delay returning until the port either sends the rest of its data, or times-out in doing it. This is done via the SO_LINGER option. To set this option, it requires an array of two elements: the first indicates whether a linger is required on any data before the shutdown completes, and the second indicates whether we actually linger. If we set a nonzero to the first while setting a zero to the second, we would simply drop whatever data is waiting in the buffer, and close the socket. To tell it simply to wait on the data to be sent, you send a non-zero for both: array(1, 1).
Note that if you have indicated not to block (socket_set_nonblock()), it will simply exit no matter what, much like it usually would. In this case it bursts an EWOULDWAIT flag, but since I don't think we have access to these socket flags in PHP, one should re-enable blocking right before they set the linger and quit.
  // These commands get fed straight through to the Unix socket libraries.. That's why they're a little more C-like.
  $arrOpt = array('l_onoff' => 1, 'l_linger' => 1);
  socket_set_block($this->Socket);
  socket_set_option($this->Socket, SOL_SOCKET, SO_LINGER, $arrOpt);
  socket_close($this->Socket);
/* any code */
$linger = array ('l_linger' => 0, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);
socket_close($sock);
This is code to force close socket connection.
Sometimes it seems that you have to shutdown() a socket before you can close() it. I experienced that while making a chatserver in PHP with this cool socket extension.

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)