Find Jobs
Hire Freelancers

Delphi/FPC: Port Windows WinSock-based Socket classes to Mac

$30-250 USD

Cancelled
Posted about 11 years ago

$30-250 USD

Paid on delivery
Port existing Windows Sockets-based Pascal language classes library to Mac OS (Delphi or Lazarus programming environment). Need support for both TCP and UDP protocols (SOCK_STREAM/SOCK_DGRAM), blocking and non-blocking sockets; don't using Indy. Non blocking sockets should not use separate thread per each socket. Classes to port: //private fields/methods are omitted ------------------- >8 ---------------------------- type //events TIPSocketOnAccept = procedure (socket:TIPSocket); TIPSocketOnConnecting = TIPSocketOnAccept; TIPSocketOnRead = TIPSocketOnAccept; TIPSocketOnConnect = TIPSocketOnAccept; //base class for TCP/UDP sockets TIPSocket = class public property Addr:sockaddr_in read GetAddr write FAddr; property Host:string read GetHost write SetHost; property Address:string read GetAddress write SetAddress; property Port:integer read GetPort write SetPort; property RemoteIP:string read GetRemoteIp; property Error:cardinal read FError; property Socket:TSocket read FSocket; function NoAddr:boolean; // true if address/port is not set constructor Create(const asynchronous:boolean = true); destructor Destroy;override; function EnableAsync:boolean;virtual; //enable non-blocking mode function DisableAsync:boolean;virtual; //disable non-blocking mode function Send(data:pointer; cb:cardinal):integer;virtual;abstract; function Rece(data:pointer; cb:cardinal):integer;virtual;abstract; procedure Close; function BytesReceived:cardinal; procedure SendReadSignal; // for non-blocking sockets sends FD_READ event to enforce reading data from the non-blocking socket. class function GetRemoteComputerName(ip:ansistring):string; static; class function ResolveHostName(s:ansistring):ansistring; static; class function StrToAddr(s:ansistring):integer;static; class function Select(nfds:Integer; readFDS, writeFDS, exceptFDS:PFDSet; timeout:PTimeVal):integer; end; TTCPSocket = class(TIPSocket) private public property OnRead:TIPSocketOnRead read FOnRead write FOnRead; property OnClose:TIPSocketOnRead read FOnClose write FOnClose; constructor Create(const asynchronous:boolean = true; const basesock:TSocket = -1); function EnableAsync:boolean;override; function Connect:boolean;virtual; function Send(data:pointer; cb:cardinal):integer;override; function Rece(data:pointer; cb:cardinal):integer;override; function SendBlock(data:pointer; cb:cardinal; const asynctimeout:integer = -1):integer;virtual; //sends long blocks (more than IO buffer size) function ReceBlock(data:pointer; cb:cardinal; const asynctimeout:integer = -1):integer;virtual; //receives long blocks (more than IO buffer size) end; TTCPServerSocket = class(TTCPSocket) private public property OnAccept:TIPSocketOnAccept read FOnAccept write FOnAccept; property Error:cardinal read FError; constructor Create(port:integer; const bindaddress:integer = INADDR_ANY; const asynchronous:boolean = true); function Listen:integer; function Accept:TTCPSocket; function EnableAsync:boolean;override; end; TUDPSocket = class(TIPSocket) private public constructor Create(const asynchronous:boolean = true); property OnRead:TIPSocketOnRead read FOnRead write FOnRead; function Broadcast(enable:boolean):boolean; //enables UDP Broadcast function MulticastTTL(value:integer):boolean; function Multicast(address:ansistring):boolean; //enables multicast for the specified address, adds itself to Multicast group function Send(data:pointer; cb:cardinal; _toaddr:integer; _toport:word):integer; function Rece(data:pointer; cb:cardinal; fromaddr:pinteger; fromport:pword):integer; function EnableAsync:boolean;override; end; TUDPServerSocket = class(TUDPSocket) private public constructor Create(port:integer; const bindaddress:integer = INADDR_ANY; const asynchronous:boolean = true); end;
Project ID: 4466696

About the project

1 proposal
Remote project
Active 11 yrs ago

Looking to make some money?

Benefits of bidding on Freelancer

Set your budget and timeframe
Get paid for your work
Outline your proposal
It's free to sign up and bid on jobs
1 freelancer is bidding on average $735 USD for this job
User Avatar
Hello, why not use Indy? What delphi version you need ?
$735 USD in 10 days
5.0 (43 reviews)
6.0
6.0

About the client

Flag of UNITED STATES
Vilnius, United States
5.0
12
Payment method verified
Member since Aug 22, 2012

Client Verification

Thanks! We’ve emailed you a link to claim your free credit.
Something went wrong while sending your email. Please try again.
Registered Users Total Jobs Posted
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Loading preview
Permission granted for Geolocation.
Your login session has expired and you have been logged out. Please log in again.