相关疑难解决方法(0)

我可以打开一个套接字并将其传递给Linux中的另一个进程

在Linux中,我是否可以打开套接字并将套接字传递给另一个进程?如果是的话,你能告诉我在哪里可以找到一个例子吗?

谢谢.

sockets linux

45
推荐指数
1
解决办法
2万
查看次数

Linux C:收到信号后,是否可以知道发送方的PID?

假设我的C程序处理SIGUSR1.当它收到信号时,是否可以知道是谁发送的?IE中.得到那个过程的pid?

c linux signals system

16
推荐指数
2
解决办法
8202
查看次数

在Java中,如何从已打开的C套接字的文件描述符中获取Socket或DatagramSocket?

我有一个Linux程序分为两部分.

一部分执行NAT遍历以获得UDP套接字(UDP打孔)或TCP套接字(TCP打孔).第一部分用C语言编写,以允许本地功能,这些功能可以促进或增强NAT遍历过程.第二部分实际上使用通过第一部分中执行的NAT遍历获得的连接套接字.

现在这是问题所在.我希望第一部分,即获得套接字的部分,独立于第二部分,即使用套接字的部分用于特定应用目的.例如,我希望第一部分可以重用于各种不同的应用程序,这些应用程序都需要在对等体之间建立的UDP和TCP连接.

现在,我希望第二部分(应用程序部分)用Java而不是C或C++编写.我希望第二部分使用由负责NAT遍历的C代码获得的套接字连接.假设第一部分建立了一个连接,然后返回一个结构:

// Represents a TCP or UDP connection that was obtained in part one.
struct ConnectionObtained {
    int socket_file_descriptor;
    int source_port;
    int destination_port;
    int source_address; // 4 byte ipv4 address
    int destination_address;
    int is_UDP; // 1 for UDP client socket, 0 for TCP client socket 
};
Run Code Online (Sandbox Code Playgroud)

第一部分中的C代码可以通过JNI(Java Native Interface)或通过进程间通信将此POD /结构提供给第二部分中的Java代码.

我希望Java代码使用该信息来构造一个声明类型为java.net.DatagramSocket或java.net.Socket的对象,然后在需要DatagramSocket或Socket的任何地方使用该对象.

作为起点,请考虑以下示例代码......

/** 
 * Determines the Unix file descriptor number of the given  {@link ServerSocket}.
 */
private int getUnixFileDescriptor(ServerSocket ss) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
  Field …
Run Code Online (Sandbox Code Playgroud)

c java sockets udp tcp

9
推荐指数
1
解决办法
1608
查看次数

有没有合理的理由在TCP/IP上使用Unix套接字和mysql?

我试图弄清楚为什么mysql默认使用Unix套接字(/tmp/mysql.sock),而不是普通的TCP/IP套接字.

它似乎不是一个安全的东西,因为你只能在127.0.0.1上监听,它应该同样安全(套接字文件是世界可写的,因此你不能获得基于Unix帐户的保护).

当然,所有操作系统都依赖于高性能的TCP/IP,以至于它不会比Unix套接字慢得多 - 即使对于网络流量,Linux也会做各种零拷贝技巧,所以它肯定必须快速进行环回.

那么在这里使用Unix套接字有什么合理的理由,还是只是一些奇怪的历史事故?

mysql

5
推荐指数
2
解决办法
3637
查看次数

使用UNIX套接字将文件描述符从一个程序传递到同一主机上的另一个程序

我有两个prgrams让我们说prog1和prog2.我正在用prog1打开一个文件并对其进行一些操作.现在没有关闭prog1中的文件,我使用unix套接字将其文件描述符发送到prog2,然后在其中执行一些操作.

虽然我得到了我在prog1中传递的相同描述符,但是在prog2中收到的fd上执行fstat()会抛出错误,说明文件描述符错误.我已经在prog1中打开了具有corerct权限的文件,这些权限对所有人都是读写,但我仍然收到错误.

为什么会这样.如果我传递文件描述符的方式是错误的,那么请建议一个正确的方法.

c linux

4
推荐指数
1
解决办法
4586
查看次数

Linux中另一个进程的重复文件描述符(不带sendmsg)

我所拥有的是进程id和来自该进程的文件描述符.除了sendmsg之外还有什么办法可以复制(或重新打开)该进程的文件描述符以供Linux中的另一个进程使用吗?

Windows有DuplicateHandle用于此目的,我想知道Linux上是否有类似的东西.

c linux ipc

4
推荐指数
1
解决办法
1708
查看次数

是一个文件描述符,它的进程是本地的,也是Unix上的全局文

int fd = socket(//arguments);
Run Code Online (Sandbox Code Playgroud)

这个描述符是否可以通过IPC传递给另一个进程并且仍然有效,或者它是创建它的进程的本地?

c unix file-descriptor

3
推荐指数
2
解决办法
1375
查看次数

标签 统计

c ×5

linux ×4

sockets ×2

file-descriptor ×1

ipc ×1

java ×1

mysql ×1

signals ×1

system ×1

tcp ×1

udp ×1

unix ×1