Mercurial > hg
comparison mcabber/socket.c @ 21:7eeda3a06b21
[/trunk] Changeset 36 by mikael
* Translations, cleanups.
author | mikael |
---|---|
date | Sun, 27 Mar 2005 18:52:11 +0000 |
parents | 0c2d2b79c4b5 |
children |
comparison
equal
deleted
inserted
replaced
20:e97f323c8aa2 | 21:7eeda3a06b21 |
---|---|
5 #include <unistd.h> | 5 #include <unistd.h> |
6 #include "utils.h" | 6 #include "utils.h" |
7 | 7 |
8 #include "socket.h" | 8 #include "socket.h" |
9 #include <signal.h> | 9 #include <signal.h> |
10 | |
11 #include "screen.h" // FIXME to be removed | |
10 | 12 |
11 /* Desc: create socket connection | 13 /* Desc: create socket connection |
12 * | 14 * |
13 * In : servername, port | 15 * In : servername, port |
14 * Out : socket (or -1 on error) | 16 * Out : socket (or -1 on error) |
58 */ | 60 */ |
59 char *sk_recv(int sock) | 61 char *sk_recv(int sock) |
60 { | 62 { |
61 int i = 1; | 63 int i = 1; |
62 int tambuffer = 128; | 64 int tambuffer = 128; |
63 char mtag[16]; | 65 char mtag[16]; // For tag name |
64 | 66 |
65 char *buffer = malloc(tambuffer); | 67 char *buffer = malloc(tambuffer); |
66 char *retval = malloc(tambuffer + 1); | 68 char *retval = malloc(tambuffer + 1); |
67 | 69 |
68 memset(retval, 0, tambuffer); | 70 memset(retval, 0, tambuffer); |
69 memset(buffer, 0, tambuffer + 1); | 71 memset(buffer, 0, tambuffer + 1); |
70 | 72 |
71 while (1) { | 73 while (1) { |
72 char *p1; | 74 char *p1; |
73 recv(sock, buffer, tambuffer, 0); | 75 int n = recv(sock, buffer, tambuffer, 0); |
76 if (n == -1) { | |
77 // Error | |
78 free(buffer); | |
79 retval[0] = 0; | |
80 return retval; | |
81 } | |
74 | 82 |
75 if (i == 1) { | 83 if (i == 1) { |
76 char *p2; | 84 char *p2; |
77 strcpy(retval, buffer); | 85 strcpy(retval, buffer); |
78 p1 = retval+1; | 86 p1 = retval+1; |
80 while (('a' <= *p1) && (*p1 <= 'z') && (p2-mtag < 14)) | 88 while (('a' <= *p1) && (*p1 <= 'z') && (p2-mtag < 14)) |
81 *p2++ = *p1++; | 89 *p2++ = *p1++; |
82 *p2++ = '>'; *p2++ = 0; | 90 *p2++ = '>'; *p2++ = 0; |
83 //fprintf(stderr, "TAG=\"%s\"\n", mtag); | 91 //fprintf(stderr, "TAG=\"%s\"\n", mtag); |
84 } else { | 92 } else { |
93 scr_LogPrint("Realloc %d [%d]", i-1, n); | |
94 if (!n) | |
95 break; | |
85 retval = realloc(retval, (tambuffer * i) + 1); | 96 retval = realloc(retval, (tambuffer * i) + 1); |
86 strncat(retval, buffer, tambuffer + 1); | 97 strncat(retval, buffer, tambuffer + 1); |
87 } | 98 } |
88 i++; | 99 i++; |
89 p1 = retval + strlen(retval) - strlen(mtag); | 100 p1 = retval + strlen(retval) - strlen(mtag); |