【linux下的UDP套接字编程】教程文章相关的互联网学习教程文章

C Boost.ASIO:使用Windows API将接受的TCP连接从一个打开的套接字传递到另一个套接字(同时使用Linux API)?【代码】

我试图学习如何使用Boost.ASIO和Windows API重新分配接受的连接.发现this code sample添加到它包括和使用命名空间所以现在它是可编辑的 – 只需复制和粘贴,在这里你去……“参数不正确”异常在同一个地方代码海报有它=(所以这里是代码:#include <iostream> #include <boost/asio.hpp>#ifdef _WIN32 #include "Windows.h" #endifusing namespace boost::asio::ip; using namespace std;int main(){ int m_nPort = 12345; boost::as...

如何在Linux上查看/更改套接字连接超时?【代码】

在Java中创建Socket时:new Socket(host, port);Socket构造函数将在返回之前尝试连接到host:port.在Windows上,对于无法访问的主机,这几乎立即失败,但对于Linux,Socket最多可能需要5分钟才能超时. 我知道如果我可以控制创建套接字,我可以这样做:Socket s = new Socket(); s.bind(..); s.connect(.., timeout);但我宁愿让操作系统使用合理的默认值.有没有办法在Linux上更改此设置? 谢谢解决方法:我想你想要/ proc / sys / net / i...

linux – 在多个线程的同一个TCP套接字上发出阻塞的write()调用是否安全?

假设我有两个线程,T1和T2. 线程T1在TCP套接字S上进行阻塞write()调用,以发送大量字节B1的缓冲区.字节B1的缓冲区很大,以至于(a)写调用块和(b)TCP必须使用多个段来发送缓冲区. 线程T2还在同一个TCP套接字S上进行阻塞write()调用,以发送一些其他大的字节B2缓冲区. 我的问题是: 在UNIX上实现TCP是否保证B1的所有字节都将在B2的所有字节之前发送(反之亦然)? 或者TCP是否可以交错B1和B2的内容(例如,TCP发送带有B1数据的段,然后是带有B2...

从TCP套接字拼接时,Linux的splice(2)是否有效?【代码】

我一直在编写一个有趣的程序,可以在Linux上用C语言通过TCP传输文件.程序从套接字读取文件并将其写入文件(反之亦然).我最初使用读/写,程序工作正常,但后来我学到了splice并想试一试. 我用splice编写的代码在从stdin(重定向文件)读取并写入TCP套接字时非常有效,但在从套接字读取并写入stdout时,会立即将splice设置errno设置为EINVAL.手册页指出当两个描述符都不是管道(不是这种情况)时,EINVAL被设置,为无法搜索的流传递偏移量(没有传...

如何处理Linux套接字会重现POLLERR,POLLHUP和POLLNVAL?

我想知道在轮询设置这些位时应该怎么做?关闭套接字,忽略它或什么?解决方法:POLLHUP表示套接字不再连接.在TCP中,这意味着FIN已被接收和发送. POLLERR表示套接字出现异步错误.在TCP中,这通常意味着已经接收或发送了RST.如果文件描述符不是套接字,则POLLERR可能意味着设备不支持轮询. 对于上述两个条件,套接字文件描述符仍处于打开状态,尚未关闭(但可能已经调用了shutdown()).文件描述符上的close()将释放仍代表套接字保留的资源.理...

linux – 确定套接字上是否还有数据并将其丢弃

我正在Linux下编写一个接口,从TCP套接字获取数据.用户提供缓冲区,其中存储接收的数据.如果提供的Buffer很小,我只想返回一个错误.第一个问题是确定缓冲区是否很小. recv()函数只返回实际写入Buffer的字节数.如果我使用recv()联机帮助页上所述的MSG_TRUNC标志,它仍然会返回相同的内容.第二个问题是丢弃仍在套接字中排队的数据.因此,如果我确定我提供的缓冲区很小,我只想删除套接字上剩下的所有东西.有没有其他方法可以这样做,除了关闭...

Linux 进程间通信方式(管道、命名管道、消息队列、信号量、共享内存、套接字)【代码】【图】

什么是进程? 在Linux系统中,进程是管理事务的基本的过程。进程拥有自己独立的处理环境和系统资源。进程整个生命可以简单划分为三种状态: 就绪态: 进程已经具备执行的一切条件,正在等待分配CPU的处理时间。 执行态: 该进程正在占用CPU运行。 等待态: 进程因不具备某些执行条件而暂时无法执行的状态。 进程间通信概念 进程是一个独立的资源分配单元,不同进行之间的资源是独立的,不能在一个进程中直接访问另一个进程的资源。所以...

Linux套接字使用多个线程发送

我有一个非阻塞套接字将udp数据包发送到多个目标,并在同一个套接字上接收来自所有目标的响应.我正在读一个专用线程,但写(sendto)可以来自几个不同的线程. 没有任何额外的同步,这是安全的吗?拿着互斥锁时我需要写吗?或者,写入是否需要来自同一个线程,我需要一个队列?解决方法:内核将为您同步对底层文件描述符的访问,因此您不需要单独的互斥锁.如果您使用TCP,这种方法会有问题,但由于我们讨论的是UDP,这应该是安全的,尽管不一定是...

linux – Nagios – 拒绝连接和套接字超时【代码】

我需要监控Windows服务(如CPU负载,内存使用等),所以我安装了Nagios监控工具.安装完成,还安装了’check_nt’插件.到目前为止,没有任何错误,但在使用代理NSClient执行脚本时“主机拒绝连接”错误仍然存??在../check_nt -H 10.112.32.78 -p 1248 -v MEMUSE -w 80 -c 90Connection refused by host./check_nt -H 10.112.32.78 -p 1248 -v MEMUSE -w 80 -c 90Socket timeout after 10 seconds我已经证实nagios工作正常,如下./usr/local/...

在Linux套接字编程中接受后的错误【代码】

如返回值部分中的accept()手册页所述:Error handling Linux accept() (and accept4()) passes already-pending network errors on the new socket as an error code from accept(). This behavior differs from other BSD socket implementations. For reliable operation the application should detect the network errors defined for the protocol after accept() and treat them like EAGAIN by retrying. In the case o...

c – 在Linux中的进程之间传输套接字

如何在Linux下的进程之间传输套接字的所有权? Windows有一个Socket.DuplicateAndClose功能,但有没有办法在Linux上执行此操作? 如果它有所作为,我想将所有权从父进程转移到子进程,并且在我获得套接字时子进程还没有启动,所以我对涉及fork的有趣解决方案持开放态度和exec系列的功能.解决方法:子进程将继承文件描述符.因此,除了在分叉子项后关闭父项中的套接字之外,您无需执行任何操作. 如果在子节点中执行另一个可执行文件,则可能需...

linux – unix域套接字执行任何文件系统读写吗?

将memcached与unix域套接字一起使用,是否有任何文件系统可读/写?如果是这样的话:对于试图减少或完全清除任何文件系统操作的工具来说,这不是一个缺点吗? 或者以另一种方式询问,是否有可能只使用内存用于unix域套接字? 我还不确定Unix域套接字是否使用文件系统,我不是C家伙,但很少关于https://github.com/torvalds/linux/blob/master/net/unix/af_unix.c实现的概述,我看到有文件系统用法.所以这不仅仅是记忆的工作吗? 编辑:在阅...

Perl套接字如何在Linux下解析主机名?【代码】

我有一个(据我所知)完美的Linux设置(Ubuntu 8.04),其中所有工具(nslookup,curl,wget,firefox等)都能够解析地址.但是,以下代码失败:$s = new IO::Socket::INET(PeerAddr => 'stackoverflow.com',PeerPort => 80,Proto => 'tcp', );die "Error: $!\n" unless $s;我验证了以下内容: > Perl能够使用gethostbyname解析地址(即下面的代码可以工作): my $ret = gethostbyname(‘stackoverflow.com’);print inet_ntoa($ret);>原始源代码...

Linux套接字缓冲数据大小

是否有任何简单的函数来检查缓冲但未读取的数据量? FD_ISSET仅指示缓冲区中是否存在数据.有可能不在程序中创建第二个缓冲区来更好地控制缓冲区吗?解决方法:您可以将recv()与MSG_PEEK和MSG_DONTWAIT标志一起使用,但是没有确切的保证在这种情况下返回的字节数不多于recv(). 在程序中使用缓冲区是解决问题的常规方法.

c – 套接字不在Linux上发送全部内容(ubuntu)【代码】

我通过TCP套接字发送大段数据时遇到了一个问题,花了大约3天时间试图分开问题并且失败我决定最好转到这里寻求帮助/建议. 我的项目我写了一个基本的HTTP服务器(稍微不相关)可以运行lua脚本来输出页面.在Windows(32位)下,这一切都完美无缺. 问题 当通过Ubuntu Linux(64位)上的TCP套接字发送中/大文件(大约8000字节及以上的任何内容似乎有问题)时,它们看起来会以不同的长度切出(浏览器中显示的结果是8000之间的值)当我检查发送功能的返...