【发布时间】:2011-05-26 13:59:34
【问题描述】:
出于THIS 的原因,我想尝试一些新的东西——使用一些系统调用关闭套接字。
两个字的情况——不能设置mysql库的查询超时(C API,更多信息请参考链接),所以我想尝试关闭套接字看看库会如何反应。可能这不是一个好主意,但还是想试试。
这就是我所做的 - 还有另一个已启动的线程 - 一个计时器。因此,在特定超时(比如说 10 秒)之后,如果没有响应,我想关闭套接字。 MYSQL 结构有成员net,这也是一个结构,并保存fd。但是当我尝试这样做时:
shutdown( m_pOwner->m_ptrDBConnection->m_mysql.net.fd, SHUT_RDWR );
close( m_pOwner->m_ptrDBConnection->m_mysql.net.fd );
什么都没有发生。 shutdown和close的返回值是0,但是socket仍然是打开的(因为等待60秒后,DB有返回结果,也就是说mysql客户端还在等待DB的响应.
有什么想法吗?
谢谢
编辑 - 是的,有一个正在运行的事务,而我正在尝试关闭套接字。但这是实际的问题 - 我无法终止查询,也无法关闭连接,什么都没有,我不想等待整个超时,即 20 分钟和 30 秒,或类似的东西。这就是为什么我正在寻找一个蛮力..:/
【问题讨论】:
-
你确定那是正确的插座吗?
-
我想是这样 -
fd是正确的 FD,它会根据打开的文件而改变。此外,这是唯一可以在 MySQL 对象(实际上是结构)中保存 FD 的字段。 -
@Nikolai - 有没有办法查看哪个套接字对应于哪个端口号,以 100% 确定这是正确的套接字? (OS-RHEL4)
-
搜索
lsof。您可能需要安装它。 -
对不起
netstat,还需要更多咖啡:),试试lsof。