标签: unix-socket

Python:code.interact(local = locals())其中stdin/stdout不可用

在Python中,以下代码片段将在执行时打开交互式shell.

import code; code.interact(local = locals())
Run Code Online (Sandbox Code Playgroud)

事实证明,这对于在相当多的文档中进行调试非常有用.即使没有调试器,也可以使用shell来导航程序内环境并找出正在发生的事情.到现在为止还挺好.

现在是挑战.

我正在使用的软件(顺便说一下,用Django编写)使用某种调度机制,然后对另一个 Python进程说话,除了编辑代码之外我无法控制.除了我发送给它进行处理的变量之外,我没有任何输入.

但是,由于文档很差,我不知道代码是如何工作的,所以我想用这个code.interact方法来解决问题.

但是这个过程是通过一些特殊的调度软件在后台的某个地方启动的,所以流程不会从Django应用程序转到我想要检查的部分.相反,发送信号和对象,然后在完全不同的过程中在任意时间(10-200ms之间的任何时间)运行.当接收到信号和对象时,stdin/stdout完全不在图片中.

所以我认为不是使用stdin/stdout与之通信,code.interact而是可以通过指定readfunc参数来使用文件句柄或Unix套接字.我通过open()文件和套接字试过这个,但无济于事.

现在我试图仅仅从Django进程本身开始工作,所以即使是调度问题也是不可能的,当交互式shell确实启动时,它立即关闭,既不接受带有命令作为内容的文件,也不接受用于Python命令管道的Unix套接字.

使长话短说; 是否可以code.interact通过除stdin/stdout之外的其他方式调用的交互式shell进行通信?如果是这样,怎么样?

提前致谢.

python unix django scheduler unix-socket

7
推荐指数
1
解决办法
3446
查看次数

如何使用akka连接到Unix套接字?

虽然在akka中使用TCP或UDP连接到java.net.InetSocketAddress相对容易,但API中的SocketAddress和Unix-socket似乎没有等价物.

对于我目前的项目,我需要使用Unix-Socket 连接到Docker Remote-API.有没有办法使用akka这样做或我需要使用不同的方法?

scala unix-socket akka

7
推荐指数
1
解决办法
577
查看次数

如何使用socat代理拦截Unix域套接字发送辅助数据?

我有两个程序,一个服务器和一个客户端.服务器打开文件,向其写入数据,然后通过unix域套接字将其文件描述符发送到客户端.一切正常,直到我介绍一个socat代理.

socat -x -v UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork UNIX-CONNECT:/tmp/unixSockSendFd 
Run Code Online (Sandbox Code Playgroud)

说明
服务器侦听/tmp/unixSockSendFd,socat连接到它(UNIX-CONNECT:/tmp/unixSockSendFd),并创建UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork客户端连接的另一个Unix域套接字().客户端和服务器之间的任何通信都通过中继socat,打印以二进制(-x选项)和ascii(-v选项)形式发送的字节.

如果我不使用socat,并且客户端直接连接到服务器(在 /tmp/unixSockSendFd套接字上),一切正常,但当socat用作代理时,客户端崩溃时出现分段错误.

服务器

/*Server code - sendfd.c*/
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>

char *socket_path = "/tmp/unixSockSendFd";
char *file="/tmp/abcd.txt" ;/*file whose fd is to be sent*/
int sendfd(int sock, int fd);
int recvfd(int s);
char data[]="sahil\0";

int main(int argc, char *argv[]) {
  struct sockaddr_un addr;
  char buf[100]; …
Run Code Online (Sandbox Code Playgroud)

sockets linux proxy socat unix-socket

7
推荐指数
0
解决办法
862
查看次数

在UNIX域套接字上导致ECONNREFUSED的原因是什么?

在TCP服务器中,我知道拒绝连接可能是因为

  1. 通过在服务器套接字上调用close(现有连接保持打开状态,并拒绝新连接),该进程停止侦听,或者
  2. 这个过程结束了,或者
  3. 该过程并不经常接受连接,因此积压工作已满/积压太小.

ECONNREFUSED尝试连接到UNIX域套接字时可能的原因是什么.

这个问题是为了帮助我缩小Solaris 10配置上的MySQL连接之谜.

solaris unix-socket econnrefused

6
推荐指数
1
解决办法
2399
查看次数

Apache mod_proxy_uwsgi 和 unix 域套接字

我有一个为 unix 域套接字运行的 uwsgi 服务器

[uwsgi]
...
socket = /var/run/someuwsgi.sock
socket = localhost:9987
...
Run Code Online (Sandbox Code Playgroud)

mod_proxy_uwsgi 已安装

在 apache 配置中有这一行:ProxyPass /some uwsgi://localhost:9987

它正在发挥作用。

问题:通过 unix 域套接字 /var/run/someuwsgi.sock 的 apache 配置行应该是什么?我试过

ProxyPass /some uwsgi:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)

并得到

Bad Request
Your browser sent a request that this server could not understand.
Run Code Online (Sandbox Code Playgroud)

也试过

ProxyPass /some uwsgi://unix:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)

并得到

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /some/.

Reason: DNS lookup failure for: unix: …
Run Code Online (Sandbox Code Playgroud)

apache config unix-socket uwsgi

6
推荐指数
2
解决办法
5658
查看次数

使用UNIX套接字为jenkins?

一些参考:

语境:

  • 我想为我的Jenkins服务器使用UNIX套接字
  • 我有一个nginx与设置upstream配置为发送请求到詹金斯.
  • 我想使用unix socket而不是说...... --httpPort 8080

题:

有没有人做过类似的事情?我的google-fu没有帮助.

unix-socket jenkins

6
推荐指数
0
解决办法
770
查看次数

从iOS扩展中绑定Unix域套接字失败,错误为errno 48(地址已在使用中)

我有一些逻辑可以通过创建Unix域套接字来工作,并且在普通应用程序中运行时没有任何问题.但是,当我为app扩展运行时,我从bind()获得了一个带有errno = 48("Address in in use")的-1.

NSArray *applicationSupportDirectoryPaths = 
NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
                                    NSUserDomainMask, YES);

int fd = socket(AF_UNIX, SOCK_STREAM, 0); // returns a non-zero value

NSString *loc = [applicationSupportDirectoryPaths[0] stringByAppendingPathComponent:@"usd"];
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX   ;
strncpy(addr.sun_path, [loc UTF8String], sizeof(addr.sun_path)-1);
int bindres = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); // returns -1, error is 48
Run Code Online (Sandbox Code Playgroud)

库目录返回的位置是:

/var/mobile/Containers/Data/PluginKitPlugin/A8110BA2-5AE7-42C1-84DA-2A9B303C7277/Library/
Run Code Online (Sandbox Code Playgroud)

我认为这是失败的原因是因为这是一个特殊的位置,与应用程序的库目录相比.

如果有人有任何想法为什么会发生这种情况或任何变通方法,我很感激.

更新:我尝试了缓存目录(NSCachesDirectory),但现在我得到了错误3(没有这样的过程).

sockets unix-socket ios ios-extensions

6
推荐指数
1
解决办法
572
查看次数

Apache 代理传递到 unix 域套接字

我需要将所有流量从指定端口转发到 Apache 中的 Unix 域套接字:

sites-enabled/000-default.conf我定义了一个VirtualHost:

<VirtualHost *:8091>
    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyPass / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
    ProxyPassReverse / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

ports.conf我有:

Listen 80
Listen 8091
Run Code Online (Sandbox Code Playgroud)

我同时启用了proxyproxy_httpmods:

krzysiek:/etc/apache2$ a2enmod proxy
Module proxy already enabled
krzysiek:/etc/apache2$ a2enmod proxy_http
Module proxy already enabled
Run Code Online (Sandbox Code Playgroud)

我正在使用 Apache 2.4.7,官方文档指出:

在 2.4.7 及更高版本中,通过使用前缀为 unix:/path/lis.sock| 的目标,可以支持使用 Unix 域套接字。

当我重新加载 Apache 时,出现错误:

krzysiek:/etc/apache2$ sudo service apache2 restart
* Restarting web server apache2                                [fail] 
* The apache2 …
Run Code Online (Sandbox Code Playgroud)

apache mod-proxy proxypass unix-socket

6
推荐指数
1
解决办法
4897
查看次数

Google Cloud SQL 上的 PostgREST:unix 套接字 URI 格式?

有谁有使用 PostgREST 和 Cloud SQL 的经验吗?

我的 SQL 实例已准备好开放访问 (0.0.0.0/0),我可以使用云代理应用程序通过本地 PostGREST 访问它。

现在我想从同一个项目的实例运行 Postgrest,但我找不到支持 Cloud SQL 格式的 Postgrest URI 格式,因为 Google SQL Cloud 只使用像 /cloudsql/INSTANCE_CONNECTION_NAME

配置 1

db-uri = "postgres://postgres:password@/unix(/cloudsql/INSTANCE_CONNECTION_NAME)/mydatabase"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)

退货 {"details":"could not translate host name \"unix(\" to address: Unknown host\n","code":"","message":"Database connection error"}

配置 2

db-uri = "postgres://postgres:password@/mydatabase?unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)

解析器拒绝问号 {"details":"invalid URI query parameter: \"unix_socket\"\n","code":"","message":"Database connection error"}

配置 3

db-uri = …
Run Code Online (Sandbox Code Playgroud)

unix-socket google-cloud-sql postgrest

6
推荐指数
1
解决办法
1066
查看次数

Docker:MySQL容器绑定主机mysqld套接字

我正在使用 Docker 19.03.8 并且想要设置两个容器:

  • 第一个是 MySQL 容器,它从主机绑定安装 mysqld 套接字。
  • 第二个是PHP容器,需要通过MySQL容器访问数据库。

两个容器通过该语句共享同一个网络networks。(我无法将 mysqld 套接字直接绑定安装到 PHP 容器中,因为 MySQL 版本不同,因此 MySQL 容器也不同)。

这是我的docker-compose.yml文件:

...
database:
  build: .
  volumes:
    - /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)

MySQL的Dockerfile :

FROM mysql:8.0.20
COPY my.cnf /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

my.cnf文件包含:

...
[mysql]
socket = /tmp/mysql.sock

[mysqld]
socket = /tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,我从 MySQL 容器收到此错误消息:

2020-05-20T11:30:04.708067Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: Address already in use
2020-05-20T11:30:04.708406Z 0 [ERROR] [MY-010258] [Server] Do you already …
Run Code Online (Sandbox Code Playgroud)

php mysql unix-socket docker

6
推荐指数
1
解决办法
9252
查看次数