hello
i am new to writing pd externals and have some general questions. i am trying to write an external which establishes a socket connection to an other programm. when I try to compile the fallowing source it does not seem to work because of unlink, bind and accept. i create the socket in the constructor and try to write to it in the function connect_to. when i compile the source i get only warnings and no errors but it still fails to compile. i am using the makefile provided in /usr/lib/pd/doc/6.externs and gcc-3.4 for compilation.
without the method connect compilation works fine.
#include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <stdio.h> #include <sys/time.h> #define NSTRS 3 /* no. of strings */ #define ADDRESS "myso" /* addr to connect */ #include "m_pd.h"
char c; FILE *fp; int fromlen; char *strs; int time; char string[50]; int i, s, ns, len; struct sockaddr_un saun, fsaun;
typedef struct obj1 { t_object x_ob; } t_obj1;
t_class *obj1_class;
void *obj1_new(void) { if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { post("no socket");
}
t_obj1 *x = (t_obj1 *)pd_new(obj1_class); post("obj1_new"); return (void *)x;
}
void connect_to(t_obj1 *x) { saun.sun_family = AF_UNIX; strcpy(saun.sun_path, ADDRESS);
unlink(ADDRESS);
len = sizeof(saun.sun_family) + strlen(saun.sun_path);
if (bind(s, &saun, len) < 0) {
}
if (listen(s, 5) < 0) { }
if ((ns = accept(s, &fsaun, &fromlen)) < 0) { }
fp = fdopen(ns, "r");
send(ns, string, strlen(string), 0);
close(s);
}
void obj1_setup(void) { post("obj1_setup"); obj1_class = class_new(gensym("obj1"), (t_newmethod)obj1_new, 0, sizeof(t_obj1), 0, 0);
class_addmethod(obj1_class, (t_method)connect_to, gensym("connect_to"), 0); }
thank you for any help
michael