Java 套接字积压行为
如果Serversocket的待办事项中有大量请求,并且正在执行长时间运行的作业,那么套接字的行为将是什么。 当我尝试此操作时,从windows telnet可以连接。但是从unix它得到“连接被拒绝”。 我的应用程序是用java编写的,运行在ibmjvm上。 顺便说一句,我们的应用程序没有从unix响应telnet。 不响应意味着它正在写“tyring…”并挂起,而不是拒绝或连接。有人能为这种行为辩护吗?Java 套接字积压行为,java,sockets,serversocket,backlog,Java,Sockets,Serversocket,Backlog,如果Serversocket的待办事项中有大量请求,并且正在执行长时间运行的作业,那么套接字的行为将是什么。 当我尝试此操作时,从windows telnet可以连接。但是从unix它得到“连接被拒绝”。 我的应用程序是用java编写的,运行在ibmjvm上。 顺便说一句,我们的应用程序没有从unix响应telnet。 不响应意味着它正在写“tyring…”并挂起,而不是拒绝或连接。有人能为这种行为辩护吗? 谢谢。如果套接字处于侦听状态,则不应出现“连接被拒绝”。在耗尽backlog设置提供的插
谢谢。如果套接字处于侦听状态,则不应出现“连接被拒绝”。在耗尽backlog设置提供的插槽之前,您的连接请求应该得到确认(但不会发生更多情况)。当您达到
listen
系统调用设置的积压限制时,“Trying…”是正常行为(服务器丢弃数据包,直到侦听积压插槽可用,客户端重新传输SYN数据包,直到发生连接超时或服务器确认连接请求)。首先感谢您的回答。当我尝试此操作时,套接字不在accept上(例如,它在accept下面的断点上)(backlog已达到限制),我拒绝了连接。当我使用netstat查看时,我看到我的端口处于侦听模式。我无法在我的机器上生成“正在尝试…”的情况,而我以前在生产中遇到问题时看到过这种情况。它不需要“处于接受状态”。要开始接收连接,只需要bind
和listen
。然后,每个传入连接都会被操作系统接受,并在backlog参数允许的范围内排队。当应用程序到达accept
时,它将从队列中获取已接受的连接,一次一个。此行为取决于平台。当积压工作填满时,Windows会发出RST,这会导致“连接被拒绝”。Unix、Linux只需删除SYN数据包。