microdc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[microdc-devel] Idea


From: Serge
Subject: [microdc-devel] Idea
Date: Tue, 7 Aug 2007 00:42:46 +0400

Hi!

Please include this patch into next release.
If you've many aliases this patch is very useful.
Maybe need some correct.
Thnx.

patch for microdc2-0.15.6
------------------------
--- main.c.orig 2006-12-24 21:23:51.000000000 +0300
+++ main.c      2007-08-07 00:33:41.000000000 +0400
@@ -1020,7 +1020,11 @@
        addr_len = sizeof(addr);
        addr.sin_family = AF_INET;
        addr.sin_port = htons(listen_port);
-       addr.sin_addr.s_addr = htonl(INADDR_ANY);
+       if (force_listen_addr.s_addr != INADDR_NONE) {
+            addr.sin_addr.s_addr = force_listen_addr.s_addr;
+        } else {
+            addr.sin_addr.s_addr = htonl(INADDR_ANY);
+       }
        if (bind(search_socket, (struct sockaddr *) &addr, addr_len) < 0) {
            warn(_("Cannot bind to address - %s\n"), errstr);
            return false;
--- user.c.orig 2006-11-30 13:00:40.000000000 +0300
+++ user.c      2007-08-07 00:33:41.000000000 +0400
@@ -1409,6 +1409,7 @@
 user_main(int get_fd[2], int put_fd[2], struct sockaddr_in *addr, int sock)
 {
     struct sigaction sigact;
+    struct sockaddr_in addr_bind;
     DCUserConnLocal *ucl;
 
     filelist_free(our_filelist);
@@ -1471,7 +1472,7 @@
     ucl->user_sendq = byteq_new(DEFAULT_SENDQ_SIZE);
     ucl->dir_rand = rand() % 0x8000;
     if (sock < 0) {
-       ucl->user_socket = socket(PF_INET, SOCK_STREAM, 0);
+       ucl->user_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (ucl->user_socket < 0) {
             warn(_("Cannot create socket - %s\n"), errstr);
            goto cleanup;
@@ -1493,6 +1494,17 @@
         * success, we would catch the successful connection after select -
         * when socket_fd is writable.
         */
+        addr_bind.sin_family = AF_INET;
+        addr_bind.sin_port = htons((int)NULL); // random port
+        if (force_listen_addr.s_addr != INADDR_NONE) {
+            addr_bind.sin_addr.s_addr = force_listen_addr.s_addr;
+        } else {
+            addr_bind.sin_addr.s_addr = htonl(INADDR_ANY);
+        }
+        if (bind(ucl->user_socket, (struct sockaddr *) &addr_bind, 
sizeof(struct sockaddr_in)) < 0) {
+            warn(_("Cannot bind to address - %s\n"), errstr);
+            goto cleanup;
+        }
        if (connect(ucl->user_socket, (struct sockaddr *) addr, sizeof(struct 
sockaddr_in)) < 0
                && errno != EINPROGRESS) {
             warn(_("Cannot connect - %s\n"), errstr);
------------------------

------------------------
Serge
mailto:address@hidden





reply via email to

[Prev in Thread] Current Thread [Next in Thread]