GVKun编程网logo

【bug】Socket operation on non-socket(socket no buffer space)

16

对于【bug】Socketoperationonnon-socket感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解socketnobufferspace,并且为您提供关于c#–System

对于【bug】Socket operation on non-socket感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解socket no buffer space,并且为您提供关于c# – System.Net.Sockets.SocketException创建websocket连接时、Caused by: java.net.SocketException: Connection reset by peer: socket write erro、Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted、IDEA 启动 tomcat 报 java.net.SocketExceptionsocket closed的宝贵知识。

本文目录一览:

【bug】Socket operation on non-socket(socket no buffer space)

【bug】Socket operation on non-socket(socket no buffer space)

bug代码

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <errno.h>
 4 #include <sys/types.h>          
 5 #include <sys/socket.h>
 6 #include <netinet/in.h>
 7 #include <netinet/ip.h>
 8 #include <string.h>
 9 
10 #define handdle_error(msg)\
11     do{perror(msg);exit(EXIT_FAILURE);}while(0)
12 
13 #define BACK_LOG 10
14 #define BUF_SIZE 1024
15 int main(int argc, char** argv)
16 {
17     int sfd, cfd;
18     if (sfd = socket(AF_INET, SOCK_STREAM, 0) == -1)
19         handdle_error("create socket fail:");
20 
21     struct sockaddr_in servaddr;
22     memset(&servaddr, 0, sizeof(sockaddr_in));
23     servaddr.sin_family = AF_INET;
24     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
25     servaddr.sin_port = htons(6666);
26     if ((bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) == -1)
27         handdle_error("bind socket error:");
28 
29     if ((listen(sfd, BACK_LOG)) == -1)
30         handdle_error("listen socket fail:");
31 
32     char buf[BUF_SIZE];
33     int rcv;
34     std::cout << "prepare to receive message" << std::endl;
35     while (1)
36     {
37         if ((cfd = accept(sfd, (sockaddr*)NULL, NULL)) == -1)
38         {
39             std::cout << "accept socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl;
40             continue;
41         }
42         if (rcv = recv(cfd, (void*)buf, BUF_SIZE, 0) < 0)
43         {
44             std::cout << "recv socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl;
45             continue;
46         }
47         buf[rcv] = ''\0'';
48         std::cout << "receive message from client is:" << buf << std::endl;
49     }
50     return 0;
51 }

编译OK,运行报错

根据提示说明是第26行报错

但是看代码一点问题没有

原因是socket创建sfd那里除了问题,正确写法,见右侧

这种()不匹配问题往往十分隐晦,一个好的方法是在()两侧流出空格,这样在语法高亮器的辅助下更容易发现问题

 

c# – System.Net.Sockets.SocketException创建websocket连接时

c# – System.Net.Sockets.SocketException创建websocket连接时

我是websocket的新手.我在.net 4.5框架中创建了一个控制台应用程序,并使用库“WebSocketSharp”创建了一个示例websocket客户端.我有以下代码

using System;
using WebSocketSharp;


namespace WebsocketTest
{
    class Program
    {
        public static void Main(string[] args)
        {
            try
            { 
            using (var ws = new WebSocketSharp.WebSocket("ws://192.168.18.186:7884"))
            {
               Console.WriteLine("started");
                ws.Connect();
                ws.Send("START");
                Console.ReadLine();
                }
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }

        }
    }
}

但是我无法创建与在另一台机器上运行的websocket服务器的连接.我收到这样的错误信息

09-05-2017 16:20:41|Fatal|WebSocket.connect:0|System.Net.sockets.socketException (0x80004005): No connection Could be made because the target machine actively refused it 192.168.18.186:7884
                             at System.Net.sockets.TcpClient..ctor(String hostname,Int32 port)
                             at WebSocketSharp.WebSocket.setClientStream()
                             at WebSocketSharp.WebSocket.doHandshake()
                             at WebSocketSharp.WebSocket.connect()

与我的代码有关的问题是什么?有什么好的websocket库可用吗?

解决方法

查找代码是否存在问题的最简单方法是使用任何支持Web套接字的浏览器尝试连接到端点,并查看会发生什么.如果不确定,你也可以只使用telnet – 因为web-socket开始是一个文本协议(http 1.1标题)而你没有使用SSL,你应该只能打开一个连接并发送一些虚拟标题.如果telnet无法连接:您的代码将无法连接.

如果telnet可以连接,则客户端lib可能存在问题.实际上有一个内置于.NET中的Web套接字客户端,您应该可以使用它(ClientWebSocket)

Caused by: java.net.SocketException: Connection reset by peer: socket write erro

Caused by: java.net.SocketException: Connection reset by peer: socket write erro

今天做了个过滤图片的servlet,功能是用来匹配自定义的文件后缀,如果是该后缀,则通过该文件的id到数据库的附件中将文件读出并将byte[]写入response的out流中,但经常会报错,初步排查原因是由于浏览器的Aborted,阻止了请求的响应,异常如下:
ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:366) 
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:433) 
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:348)

在BAIDU和GOOGLE上找了下原因,大概归结为:
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的原因是由于处理http连接时,正在输出内容时,用户关闭了IE,会出现一个"ClientAbortException",属于I/O处理中出现的一个异常,应用服务器应该会捕捉。
Connection reset by peer的原因:
经常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop
很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。

但是,我担心的是:虽然前台没有任何出错的迹象,但是后台会记录这个异常,日志也会疯狂爆满,时间长了,肯定会DOWN掉的,还没找到好的解决办法。

暂时HACK式的解决方法:
把下载文件的代码放在try……catch块中,在catch部分使用判断避免让系统抛出ClientAbortException,具体方法可以这样:

try{
...
}catch(Exception ex){
   String simplename = ex.getClass().getSImpleName();
   if(!"ClientAbortException".equals(simplename)){
         ex.printStackTrace();
    }
}

这样可以解决该异常的发生,进而不让日志文件暴涨

Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted

2019-09-05T14:59:25.718+0800 W -        [initandlisten] Detected unclean shutdown - /data/mongodb/data/mongod.lock is not empty.
2019-09-05T14:59:25.718+0800 E NETWORK  [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
2019-09-05T14:59:25.718+0800 F -        [initandlisten] Fatal Assertion 40486 at src/mongo/transport/transport_layer_asio.cpp 171
 

2016-07-12T16:52:28.912+0800 E NETWORK  [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
2016-07-12T16:52:28.912+0800 I -        [initandlisten] Fatal Assertion 28578
2016-07-12T16:52:28.912+0800 I -        [initandlisten] 

从红色的提示可以看出是因为/tmp/mongodb-27017.sock这个文件没有操作权限。

rm -rf  /tmp/mongodb-27017.sock

 

原因分析:

查看该文件情况如下:

可以看到这个文件的所有者是root用户,因为在准备环境的时候用的是root用户,而当时用root用户启动过一个没成功,后面修改配置文件过后用mongodb用户启动就出现了这个问题。

觖方法:

直接把该文件删除掉用Mongodb用户启动就行了。

可以看到这一次就是mongodb用户创建的文件了


————————————————
版权声明:本文为CSDN博主「doegoo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/doegoo/article/details/51906165

IDEA 启动 tomcat 报 java.net.SocketExceptionsocket closed

IDEA 启动 tomcat 报 java.net.SocketExceptionsocket closed

IDEA 启动 tomcat 报 java.net.SocketException:socket closed。如图所示
 
解决方法:打开任务管理器,检查有没有 java.exe 进程。 关闭了重新启动就好了
这是我目前找到的唯一的解决方法.
 

我们今天的关于【bug】Socket operation on non-socketsocket no buffer space的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – System.Net.Sockets.SocketException创建websocket连接时、Caused by: java.net.SocketException: Connection reset by peer: socket write erro、Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted、IDEA 启动 tomcat 报 java.net.SocketExceptionsocket closed的相关信息,请在本站查询。

本文标签: