草庐IT

socket_write

全部标签

linux - write() 系统调用何时写入所有请求的缓冲区,而不是只进行部分写入?

如果我指望我的write()系统调用写入例如100个字节,我总是将write()调用放在一个循环中,该循环检查返回的长度是否是我期望发送的长度,并且,如果不是,它会增加缓冲区指针并将长度减少写入的量。所以我又一次这样做了,但是现在有StackOverflow,我可以问你们大家是否知道我的写入什么时候会写出我要求的所有内容,而不是给我部分写入?附加评论:X-Istence的回复提醒我,我应该注意到文件描述符是阻塞的(即,不是非阻塞的)。我认为他是在建议阻塞文件描述符上的write()不会写入所有指定数据的唯一方法是write()被信号中断时。这似乎至少对我来说具有直觉意义......

c - 有没有更简洁的方法来可靠地使用 write() 函数?

我阅读了man页面,我的理解是如果write()失败并将errno设置为EAGAIN或EINTR,我可能会再次执行write(),所以我想出了以下代码:ret=0;while(ret!=count){write_count=write(connFD,(char*)buf+ret,count);while(write_count我在套接字上执行read()和write()并像上面一样处理read()。我正在使用带有gcc编译器的Linux。 最佳答案 那里有点“不要重复自己”的问题-不需要两次单独调用write,也不需要两个嵌套循环。

c - 有没有更简洁的方法来可靠地使用 write() 函数?

我阅读了man页面,我的理解是如果write()失败并将errno设置为EAGAIN或EINTR,我可能会再次执行write(),所以我想出了以下代码:ret=0;while(ret!=count){write_count=write(connFD,(char*)buf+ret,count);while(write_count我在套接字上执行read()和write()并像上面一样处理read()。我正在使用带有gcc编译器的Linux。 最佳答案 那里有点“不要重复自己”的问题-不需要两次单独调用write,也不需要两个嵌套循环。

c - 如何在linux中模拟socket/tcp编程的异常情况,例如终止连接的一侧?

我正在学习使用SO_SNDTIMEO和SO_RCVTIMEO检查超时。它很容易与read套接字一起使用。但是当我想检查write超时时,它总是返回成功。这是我所做的:(全部处于阻塞模式)关闭客户端读取套接字并在服务器启动前退出写入在服务器启动之前终止客户端写入在接受之后写入之前拔下服务器的电缆嗯,看来所有这些casewrite都成功返回了。我想原因应该是端口是os管理的资源,在客户端,程序消失后,tcp连接仍然显示FIN_WAIT2状态。那么,有没有什么方便的方法来模拟一些write会收到错误的情况,比如EPIPE,EAGAIN? 最佳答案

c - 如何在linux中模拟socket/tcp编程的异常情况,例如终止连接的一侧?

我正在学习使用SO_SNDTIMEO和SO_RCVTIMEO检查超时。它很容易与read套接字一起使用。但是当我想检查write超时时,它总是返回成功。这是我所做的:(全部处于阻塞模式)关闭客户端读取套接字并在服务器启动前退出写入在服务器启动之前终止客户端写入在接受之后写入之前拔下服务器的电缆嗯,看来所有这些casewrite都成功返回了。我想原因应该是端口是os管理的资源,在客户端,程序消失后,tcp连接仍然显示FIN_WAIT2状态。那么,有没有什么方便的方法来模拟一些write会收到错误的情况,比如EPIPE,EAGAIN? 最佳答案

c - 反调试 : gdb does not write 0xcc byte for breakpoints. 知道为什么吗?

我正在学习Linux上的一些反调试技术,发现了一段代码,用于检查内存中的0xcc字节以检测gdb中的断点。这是代码:if((*(volatileunsigned*)((unsigned)foo+3)&0xff)==0xcc){printf("BREAKPOINT\n");exit(1);}foo();但它不起作用。我什至尝试在foo()函数上设置断点并观察内存中的内容,但没有看到任何为断点写入的0xcc字节。这是我所做的:(gdb)bfooBreakpoint1at0x804846a:filep4.c,line8.(gdb)x/x0x804846a0x804846a:0xe02404c

c - 反调试 : gdb does not write 0xcc byte for breakpoints. 知道为什么吗?

我正在学习Linux上的一些反调试技术,发现了一段代码,用于检查内存中的0xcc字节以检测gdb中的断点。这是代码:if((*(volatileunsigned*)((unsigned)foo+3)&0xff)==0xcc){printf("BREAKPOINT\n");exit(1);}foo();但它不起作用。我什至尝试在foo()函数上设置断点并观察内存中的内容,但没有看到任何为断点写入的0xcc字节。这是我所做的:(gdb)bfooBreakpoint1at0x804846a:filep4.c,line8.(gdb)x/x0x804846a0x804846a:0xe02404c

linux - Django celery socket.error : [Errno 111] Connection refused

在我的生产服务器上运行命令celerystatus时出现此错误:但是,Celery工作并且worker确实在运行,这个错误是什么,为什么我不能运行这个命令?ubuntu@ip-10-32-9-39:/srv/project/logs/celery$celerystatusTraceback(mostrecentcalllast):File"/usr/local/bin/celery",line9,inload_entry_point('celery==3.0.11','console_scripts','celery')()File"/usr/local/lib/python2.7/d

linux - Django celery socket.error : [Errno 111] Connection refused

在我的生产服务器上运行命令celerystatus时出现此错误:但是,Celery工作并且worker确实在运行,这个错误是什么,为什么我不能运行这个命令?ubuntu@ip-10-32-9-39:/srv/project/logs/celery$celerystatusTraceback(mostrecentcalllast):File"/usr/local/bin/celery",line9,inload_entry_point('celery==3.0.11','console_scripts','celery')()File"/usr/local/lib/python2.7/d

Linux 中 C/Socket 编程中的聊天室

我有一个简单的服务器和客户端C代码,用于使用线程(pthread库)为多客户端创建聊天室。我一直遇到的问题是,我想不出一种方法让服务器将客户端通过套接字发送的每条消息写入所有其他客户端。我在这里读过其他类似的帖子,但很无助。请帮助我,我需要为学校做这件事。我会立即发送这两个代码。服务器.c:#include#include//strlen#include//strlen#include#include//inet_addr#include//write#include//forthreading,linkwithlpthreadvoid*connection_handler(void*