[fpc-pascal] Sending UDP packets windows, linux

Rainer Stratmann RainerStratmann at t-online.de
Sat Mar 21 14:02:50 CET 2009


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 at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal



More information about the fpc-pascal mailing list