Hallo,
ich bin grade mit meinem PI eine Smart Home Zentrale zu basteln, es läuft soweit ganz gut, aber ab und zu hab ich noch Problemchen.
Habe ein TCP Socket, wenn der läuft.. dann läuft der Stabil... aber wenn ich mein Programm mal beende und neustarte... kann es passieren dass ich keine Verbindung aufbauen kann... erst nach x mal beenden und starten.. evlt sogar nach einem neuem "make"...
code:
Code
PI_THREAD(tcp_schleife) {
//Öffne Socket
connfd = accept(listenfd, (struct sockaddr*) NULL, NULL);
/**Receive**/
recv(connfd, recByte, sizeof (recByte), 0);
//Selektiert nach recByte[0]
switch (recByte[0]) {
case 10:
printf("tempIDSYNC");
ID_Temp_Sync();
sendByte[0] = 0x0A;
printf("%x",sendByte[3]);
write(connfd, sendByte, strlen(sendByte));
break;
case 3: Schaltmodus();
printf("SDstatus %c\n", sendByte[3]);
//Sende Rückmeldung
write(connfd, sendByte, strlen(sendByte));
break;
case 2:
sendByte[0] = 0x02;
TempSyncAPP();
break;
case 1: SdSync();
write(connfd, sendByte, strlen(sendByte));
break;
case 4: RGB();
break;
}
sendByte[0] = 0x00;
close(connfd);
}
int main(int argc, unsigned long *argv[]) {
/***Konfiguration TCPSocket***/
listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof (serv_addr));
memset(recByte, '0', sizeof (recByte));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT);
bind(listenfd, (struct sockaddr*) &serv_addr, sizeof (serv_addr));
listen(listenfd, 10);
/***Konfiguration ende***/
while (1) {
/* .........*/
piThreadCreate(tcp_schleife);
usleep(10);
}
return 0;
}
Alles anzeigen
mache ich irgendwas falsch? oder liegt es evlt garnicht an meiner Soft?ich habe jetzt paar Error Logs eingebaut....
ERROR on binding: Address already in use
spuckt der mir raus... kann es sein dass der im Hintergrund weiter läuft wenn ich das beende?
und der daher den Port blockiert?