Jump to content

Mark-

Members
  • Content Count

    297
  • Joined

  • Last visited

  • Days Won

    1

Mark- last won the day on August 15 2022

Mark- had the most liked content!

Community Reputation

32 Excellent

1 Follower

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Mark-

    Alignment of group of controls

    I would guess at or near the bottom of the object inspector.
  2. Mark-

    UDP bind...

    Thanks. Industrial application, lots of networks, binding is necessary in some instances.
  3. Mark-

    UDP bind...

    Using UDP, how to bind the socket to a NIC or other interface device? > For UDP client, TWSocket LocalAddr and LocalPort may be set but are usually left blank,... Does that bind the socket (UDP) to the NIC or whatever the interface device type? I am trying to make sure I understand, for what I am trying to accomplish, and I want to update the Wiki with more data.
  4. Mark-

    UDP bind...

    Thanks for the response. So, for a UDP server, setting the addr is the interface address and LocalAddr is ignored? For a UDP client, how to bind the socket to an interface device? Using LocalAddr? Mark
  5. Hello, The Wiki page https://wiki.overbyte.eu/wiki/index.php/TWSocket Addr Client: The host to connect to. Server: The interface to listen on. LocalAddr The local address to which the socket is bound. Is this true for TCP and UDP? For a client, Addr is the remote (host) address and LocalAddr, if specified, is the interface to bind the socket. For a server, Addr specifies the interface to listen on so LocalAddr is not used. Mark
  6. You are correct, thank you.
  7. Thank you Remy. This: WsocketErrorDesc(ESocketException(exceptObject).ErrorCode) works. I am hoping Angus reads the post.
  8. Hello, Delphi 10.2.3, (VCL) current version of ICS (V9.4). Testing to verify I caught and handled the issue of the customer entering a bad IP address for binding. The IP address is formatted correctly, just not a valid IP address for any present interface. I was using the OnError callback. Call connect, onError is called but, "LastError" was zero. Switched to catching it as an exception try Connect except end; LastError is still zero. Looked in the source at procedure TCustomWSocket.BindSocket; ... if WSocket_Synchronized_bind(HSocket, PSockAddrIn(@LocalSockName)^, SockNamelen) <> 0 then begin and the correct error code 10049 (WSAEADDRNOTAVAIL) is present but, it is never assigned to LastError, that I could see. Perhaps there is something different I should be doing. Any ideas? Thanks, Mark
  9. Mark-

    TWSocket,,,

    Thank you Angus.
  10. Mark-

    TWSocket,,,

    Thank you. Not being on the stack is the only difference I see at the moment. I will give it a go and post the result.
  11. Mark-

    TWSocket,,,

    No problem. I found this on SO. "... that illustrates that in fact SO_BSP_STATE requires a buffer more than sizeof(CSADDR_INFO), which is in direct contrast to the Microsoft published documentation: ... Still looking for a working example in any language.
  12. Mark-

    TWSocket,,,

    Thanks for the response. Same result.
  13. Mark-

    TWSocket,,,

    Well, the wall has been hit. Not sure what is going on. Using what I "think" should work ends with: Replacing add_info:CSADDR_INFO; with add_info:CSADDR_INFO2 and no error. type SOCKET_ADDRESS = record lpSockaddr:PSOCKADDR; iSockaddrLength:integer; end; type CSADDR_INFO = record LocalAddr:SOCKET_ADDRESS; RemoteAddr:SOCKET_ADDRESS; iSocketType:Integer; iProtocol:Integer; end; type CSADDR_INFO2 = record space:array [0..127] of byte; end; procedure TForm3.FormDestroy(Sender: TObject); begin WSocket1.Abort; end; function GetLastSocketErrorMessage: string; var ErrorCode:integer; Buffer:array[0..255] of Char; begin ErrorCode := WSAGetLastError; if ErrorCode <> 0 then begin FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS, nil, ErrorCode, 0, Buffer, SizeOf(Buffer), nil ); Result := Format('Socket Error %d: %s', [ErrorCode, StrPas(Buffer)]); end else Result := 'No socket error.'; end; procedure TForm3.FormShow(Sender: TObject); var optLen:integer; add_info:CSADDR_INFO; begin WSocket1.Connect; OptLen:=SizeOf(add_info); FillChar(add_info,OptLen,#0); if WSocket_getsockopt(WSocket1.HSocket, SOL_SOCKET, SO_BSP_STATE, @add_info, OptLen) = SOCKET_ERROR then ShowMessage(GetLastSocketErrorMessage); Any ideas? Mark
  14. Mark-

    TWSocket,,,

    Thanks Angus.
  15. Hello, A computer with multiple networks interfaces. The "port" and "addr" are set. "LocalAddr" is not set. No SSL. "Connect" command is called. The question, how to determine the IP address of the network interface used. Cheers, Mark
×