Looks like the problem is a bit different. BASSenc doesn't seem to detect that the port is busy. It's possible to start multiple servers on one the same port, which results only in first one working, and the rest are not. I created a small example, please see the source code below. It starts two servers on the same port, and there's no BASS_ERROR_BUSY error. If I start two instances of the program, second instance also "initializes" two servers with no error (and they are not working).
procedure CheckError;
begin
if BASS_ErrorGetCode <> 0 then
raise Exception.CreateFmt('error: %d', [BASS_ErrorGetCode]);
end;
function MyServerClientConnectCb(handle: HENCODE;
connect: BOOL; client: PAnsiChar; headers: PAnsiChar; user1:Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
begin
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
BufSz = 256;
var
c: HCHANNEL;
enc1, enc2: HENCODE;
srv: PAnsiChar;
begin
BASS_Init(0, 44100, 0, Handle, nil);
CheckError;
//
c := BASS_StreamCreateFile(False, PChar('1.mp3'), 0, 0, BASS_UNICODE or BASS_STREAM_DECODE or BASS_SAMPLE_FLOAT);
CheckError;
//
enc1 := BASS_Encode_FLAC_Start(c, '--ogg', BASS_ENCODE_PAUSE or BASS_ENCODE_AUTOFREE or BASS_ENCODE_FP_24BIT or
BASS_UNICODE or BASS_ENCODE_CAST_NOLIMIT, nil, nil);
CheckError;
enc2 := BASS_Encode_FLAC_Start(c, '--ogg', BASS_ENCODE_PAUSE or BASS_ENCODE_AUTOFREE or BASS_ENCODE_FP_24BIT or
BASS_UNICODE or BASS_ENCODE_CAST_NOLIMIT, nil, nil);
CheckError;
//
srv := '8000';
BASS_Encode_ServerInit(enc1, srv, BufSz * 2, BufSz * 2, BASS_ENCODE_SERVER_META, MyServerClientConnectCb, nil);
CheckError;
BASS_Encode_ServerInit(enc2, srv, BufSz * 2, BufSz * 2, BASS_ENCODE_SERVER_META, MyServerClientConnectCb, nil);
CheckError;
end;