It works with windows and linux if a _connection_ between 2 PC's is made. If there is no connection fpsendto blocks the program.
Am Freitag, 20. März 2009 21:58 schrieb Rainer Stratmann: > With 2 Linux PC's this works, but I wanted to connect a Linux and a Windows > computer. > Would that be possible with UDP packets? > > fpsendto blocks the program now in windows. > > > > function socksend( d : pointer ; l : word ) : longint; > begin > result := fpsendto( inet_socket , d , l , 0 , @inetaddrsend , > sizeof( inetaddrsend ) ); > end; > > function sockreceive( d : pointer ; maxlen : word ) : longint; > var msg : longint; > begin > memclr( @inetaddrrecv , sizeof( inetaddrrecv ) ); > inetaddrrecv.sin_family := AF_INET; > // inetaddrrecv.sin_addr := strtonetaddr( s1 ); // Empfangsadresse > // inetaddrrecv.sin_port := htons( net_port ); > msg := 0; > {$ifdef linux} > msg := msg_dontwait; > {$endif} > result := fprecv( inet_socket , d , maxlen , msg ); > // result := fprecvfrom( inet_socket , d , maxlen , msg , @inetaddrrecv , > sizeof( inetaddrrecv ) ); > end; > > function init_socket( s1 , s2 : string ; exeproc : net_execproc ; var erg : > longint = -1 ) : boolean; > var > r : boolean; > nb : dword; > n : integer; > const net_port = $8000; > begin > memclr( @inetaddrbind , sizeof( inetaddrbind ) ); > inetaddrbind.sin_family := AF_INET; > inetaddrbind.sin_addr := strtonetaddr( s1 ); // Empfangsadresse > inetaddrbind.sin_port := htons( net_port ); > > memclr( @inetaddrsend , sizeof( inetaddrsend ) ); > inetaddrsend.sin_family := AF_INET; > inetaddrsend.sin_addr := strtonetaddr( s2 ); // Sendeadresse > inetaddrsend.sin_port := htons( net_port ); > > net_execute := exeproc; > > inet_socket := fpsocket( PF_INET , SOCK_DGRAM , 0 ); > > if inet_socket >= 0 then begin > > {$ifdef windows} > nb := 1; // 1=nonblocking, 0=blocking > n := ioctlsocket( inet_socket , FIONBIO , @nb ); > {$endif} > > inet_bind := fpbind( inet_socket , @inetaddrbind , sizeof( inetaddrbind ) > ); erg := socketerror; > result := inet_bind = 0; > end > else result := false; > > mylo_os_net_ipxok := result; > end; > > procedure exit_socket; > begin > if inet_socket > 0 then closesocket( inet_socket ); > end; > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > http://lists.freepascal.org/mailman/listinfo/fpc-pascal _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal