这似乎与编程有关,但这是一个操作系统问题。
我正在编写一个小型高性能守护进程,每秒需要数千个连接。它在 Linux 上运行良好(特别是 EC2 上的 Ubuntu 9.10)。在 Mac OS X 上,如果我在一个基准测试中抛出几千个连接(大约 16350 个),它只是打开一个连接,做它的事情并关闭连接,然后基准程序挂起几秒钟等待套接字变为可用在继续之前(或在过程中超时)。
我同时使用了 Apache Bench 和 Siege(以确保它不是基准应用程序)。
那么为什么/如何 Mac OS X 限制可以使用套接字的速率,我可以阻止它这样做吗?
还是有其他事情发生?
我知道有一个文件描述符限制,但我没有达到那个限制。接受套接字没有错误,它只是在第一个(大约)16000 之后挂起一段时间,等待 - 我假设 - 操作系统释放套接字。这不应该发生,因为此时所有先前的套接字都已关闭。它们应该以关闭的速度提供,并且可以在 Ubuntu 上使用,但是在 Mac OS X 上似乎存在某种多(5-10?)秒的延迟。
我尝试使用 ulimit 进行调整。纳达。
是否可以“手动”关闭 Windows 中已建立的套接字连接(例如使用命令提示工具)?我有几个打开的套接字连接到侦听服务器,我可以看到它们使用netstat,并想手动关闭其中一个。

我的笔记本电脑(联想 Z570)上有这个插座。
这个端口是什么,它有什么用途?这个符号是什么意思(我期待一个 LOCK 符号)?
我希望能够远程侦听 UNIX 套接字,以便使诸如dtach仅支持侦听 UNIX 套接字的程序远程工作。我已经阅读了关于socat它如何能够将 UNIX 套接字转发到 TCP 套接字,反之亦然,但在实践中我一直无法完成这项工作。那么,通过socat或任何其他方式,如何远程监听 UNIX 套接字?
(如果你碰巧知道如何dtach远程工作,那也没关系。这个问题只是对实际问题的抽象问题。)
尝试使用 Python 脚本时,出现此错误:
socket.error: [Errno 10013] 尝试以访问权限禁止的方式访问套接字
我把帖子放在 Stackoverflow 上,我被引导来到这里并跟进我收到错误的原因。
正如 stackoverflow 上的帖子所暗示的那样,问题不在于 Python,而在于我的计算机。我什至可以 telnet 到 smtp.gmail.com
任何人都可以提供任何建议吗?
编辑:已解决
问题是迈克菲防病毒软件。它阻塞了套接字连接。
来自 McAfee 访问保护日志
23/08/2013 10:23:54 am 被端口阻塞规则阻塞 C:\Program Files (x86)\Python26\python.exe 反病毒标准保护:防止群发邮件蠕虫发送邮件 74.125.25.108:25
我完全禁用了迈克菲,之后它运行良好。
谢谢
我对建立 SSH 隧道时发生的确切机制感兴趣。
假设我们有 3 台计算机:本地主机、中间主机和远程主机,具有以下拓扑:
Localhost --- INTERNET --- IntermediateHost --- LAN --- RemoteHost
Run Code Online (Sandbox Code Playgroud)
并且我们想建立一个通向在 RemoteHost 上运行的 Web 服务器的隧道。
中间和远程主机接受 SSH 连接。
当我在本地机器中执行以下命令时:
$ ssh -L 2022:remote:80 user@intermediate
Run Code Online (Sandbox Code Playgroud)
如果我假设以下,我是对的吗?
所以现在,在 Localhost 上运行的 Web 浏览器连接到 localhost:2022 并通过套接字发送“GET /”。SO 控制并将此信息封装在 TCP 数据包中,目标端口为 2022,然后将此信息封装在 IP 数据包中,目标地址为 LOCALHOST,操作系统的路由表确定该数据包是针对同一台机器的,所以它解开TCP数据包,读取目的地,然后解开它,将“GET /”返回给SSH客户端之前打开的serverSocket(在端口2022上)
这样对吗?因为据我所知,隧道通过SSH将TCP/IP数据包包裹起来,但是在这种情况下,SSH客户端无法访问TCP/IP数据包,它只能获取“应用程序级别”信息:“GET /”。
谢谢!
我想运行 mysql 的本地副本,以保持软件开发环境隔离。但是,我似乎无法启动 mysqld 服务器。
我已经创建了一个数据库目录mysql_install_db。我发现我需要一个套接字文件,以及如何指定路径。然而,mysqld 不断报告它无法找到或打开该文件。
/path/to/mysqld --datadir=./db/mysql --socket=./tmp/mysqld.sock
Run Code Online (Sandbox Code Playgroud)
(剪断)
130102 9:54:28 [ERROR] Can't start server : Bind on unix socket: No such file or directory
130102 9:54:28 [ERROR] Do you already have another mysqld server running on socket: ./tmp/mysqld.sock ?
Run Code Online (Sandbox Code Playgroud) 我的大学在他们的 AFS 上为每个学生提供了一个可通过 SSH 访问的目录。有一个(轻量级)CLI 驱动的软件,我想在大学里持续运行。
我以为我可以通过 SSH 通过屏幕运行软件,分离,然后在需要访问 CLI 时从任何其他 SSH 会话重新连接。但是, screen 和 tmux 不起作用,因为它们的功能依赖于套接字,并且不能在 AFS 空间上创建套接字。(见https://bugzilla.redhat.com/show_bug.cgi?id=676663)
我的帐户没有特权,但可以访问可用于在本地编译和运行事物的工具链。
有什么好的解决办法吗?
是否有一种方便的方法(例如,我可以使用标准系统调用编写的现成命令或程序)来列出 Linux 系统上某个正在运行的进程的打开 TCP 套接字的套接字选项(例如 TCP_NODELAY)?