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