lwIP accept problem

OP #2731445
Hallo!

Ich habe ein problem mit dem lwip. Ich möchte mich mit meinem PC über 
ethernet zum FPGA verbinden und dann daten vom FPGA empfangen. Ich 
verwende ein virtex5 FPGA mit dem xilkernel als OS. Das klappt auch ganz 
gut, jedoch maximal 4 mal.

wenn ich mich öffter verbinden möchte bleibt die lwip_accept() funktion 
irgendwo hängen und alles danach wird nicht mehr ausgefürt.
Ich lasse mir vor und nach der funktion jeweils ein print ausgeben.

weiß jemand woran das liegen kann?

danke martin

1
int sock, new_sd;
2
struct sockaddr_in address, remote;
3
int size;
4
  
5
/* create a TCP socket */
6
if ((sock = lwip_socket(AF_INET, SOCK_STREAM, 0)) < 0)
7
  return;
8
    
9
/* bind to port of CAN controller at any interface */
10
address.sin_family = AF_INET;
11
address.sin_port = htons(ethport);
12
address.sin_addr.s_addr = INADDR_ANY;
13
if (lwip_bind(sock, (struct sockaddr *)&address, sizeof (address)) < 0)
14
  return;
15
    
16
/* listen for incoming connections */
17
lwip_listen(sock, 5);
18

19
size = sizeof(remote);
20
  
21
while (1) {
22
        /* block */
23
  print("Info: lwip_accept() block\n\r");
24
  new_sd = lwip_accept(sock, (struct sockaddr *)&remote, &size);
25
  print("Info: lwip_accept() accepted\n\r");
26
    
27
  sys_thread_new(rx_thread, (void*)new_sd, DEFAULT_THREAD_PRIO);
28
  print("<GATEWAY Thread> Info: New RX Thread\n\r");
29
}
OP #2733001
Was mir auch noch aufgefallen ist, je mehr threads laufen, desto weniger 
verbinungen bekomme ich. Im endeffekt sollen etwas mehr als 20 threads 
permanent laufen, plus die threads die durch die verbindungen erzeugt 
werden.

bei unter 10 laufenden thread schaffe ich max. 4 verbindungen, bei etwa 
15 nur noch 2 verbindungen, und wenn ich alle threads starte bekomme ich 
gar keine verbindung.

kann das an einer resoucenknappheit liegen, zb. speicher?

jedoch kann ich 20 threads problemlos starten, und wenn ich weniger als 
10 starte und mich 4 mal verbinde bin ich immer noch weit unter 20 
threads.

also wenn es an einer resoucenknappheit liegen sollte, dürfte ich doch 
gar nicht 20 threads starten können? oder liege ich da falsch?

hat jemand eine idee?
würde mich über jede hilfe freuen!

lg martin

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.